保持nodejs健状性,异步函数错误处理方法Domain与try.catch的区别

保持nodejs健状性,异步函数错误处理方法Domain与try.catch的区别

首先看看try..catch处理错误方法

// 同步函数异常
try {
    errorObject()
} catch(error) {
    console.log(error)
    console.log(1)
}

function errorObject() {
    var i = wrong + true
    console.log(1)
}

保持nodejs健状性,异步函数错误处理方法Domain与try.catch的区别_第1张图片

虽然出现错误,但正常运行. 处理:输出了错误信息,并且输出1,


跟着尝试运行异步函数错误,看看try..catch的处理

// 异步函数异常
try {
    errorObject
} catch(err) {
    console.log(err)
    console.log('ok')
}

function errorObject() {
    setTimeout(() => {
        var i = wrong + true
        console.log(1)
    }, 10)
}

这里写图片描述

运行结果:不正常了,没有我们想得到的结果输出错误信息和ok

那遇到这种情况,我们应该怎么处理呢?那就要用到domain模块


Domain模块应用

//引入domain模块
var domain = require('domain')
//创建实例
var d = domain.create()
//监听error事件
d.on('error', (err) => {
    console.log(err)
    console.log('ok')
})
//执行相应代码
d.run(() => {
    errorObject()
})

function errorObject() {
    setTimeout(() => {
        var i = wrong + true
        console.log(1)
    }, 10)
}

保持nodejs健状性,异步函数错误处理方法Domain与try.catch的区别_第2张图片

可以看到,正常运行,并得到我们想要的结果

所以,在nodejs用Domain深层次处理异常,保持nodejs的健状性,不会因异常而退出进程.

你可能感兴趣的:(Node.js,nodejs)