[Node.js] 异步函数中的异常

在异步函数中抛异常,很难被捕获到,
因为异步任务会放在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;
    }

    // ...
});

参考

Error Handling in Node.js

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容