[Node.js] 异步函数中的异常
2017-01-12 本文已影响18人
何幻
在异步函数中抛异常,很难被捕获到,
因为异步任务会放在task queue中,等下一次event loop才被调用。
(1)try...catch,在throw之前try已经执行完了
try {
setTimeout(() => {
throw 1;
}, 0);
} catch (e) {
console.log(e);
}
// 报错:Uncaught 1
(2)在throw之前,.then()已经执行完了
Promise.resolve(1).then(v => {
setTimeout(() => {
throw 1;
}, 0);
}).catch(v => {
console.log(v);
});
// 报错:Uncaught 1
解决它的一种办法是,将异常以回调的方式返回。
asyncFunc((err, data) => {
if(err){
// ...
return;
}
// ...
});