他们已经是一个问题,关于这个话题Node.js的最佳实践异常处理 - 在异步/等待
Node.js Best Practice Exception Handling
这是旧的,答案是非常过时的,domains
甚至从那时起弃用。
现在在一篇文章中,异步/等待Node.js场景不应该同时考虑同步和异步情况,并在异步函数中抛出异常并拒绝异步函数中的promise,而不是在前一种情况下返回Error
实例。
let divideSync = function(x,y) {
// if error condition?
if (y === 0) {
// "throw" the error
throw new Error("Can't divide by zero exception")
}
else {
// no error occured, continue on
return x/y
}
}
模拟异步除法运算
let divideAsync = function(x, y) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
// if error condition?
if (y === 0) {
// "throw" the error safely by rejecting the promise
reject (new Error("Can't divide by zero exception"));
} else {
// no error occured, continue on
resolve(x/y)
}
}, 1000);
})
};
所以,同步和异步异常可以以统一的方式来处理
let main = async function() {
try {
//const resultSync = divideSync(4,0);
const resultAsync = await divideAsync(4,0);
}
catch(ex) {
console.log(ex.message);
}
}
所以按照规则,如果一个异步函数使用异步然后抛出错误,如果没有的话拒绝错误 –
没有,即使函数不使用'async'语法,但如果你愿意的话,你可以并且应该''抛出'(或者'返回Promise.reject(...)')promise promise, 1000))然后(()=> {if(y === 0)抛出新的错误(...)否则返回x/y})' – Bergi
为什么异常不会被捕获(未处理)代码 –