[Node.js] 異步函數(shù)中的異常

在異步函數(shù)中拋異常,很難被捕獲到,
因為異步任務(wù)會放在task queue中,等下一次event loop才被調(diào)用。


(1)try...catch,在throw之前try已經(jīng)執(zhí)行完了

try {
    setTimeout(() => {
        throw 1;
    }, 0);
} catch (e) {
    console.log(e);
}

// 報錯:Uncaught 1

(2)在throw之前,.then()已經(jīng)執(zhí)行完了

Promise.resolve(1).then(v => {
    setTimeout(() => {
        throw 1;
    }, 0);
}).catch(v => {
    console.log(v);
});

// 報錯:Uncaught 1

解決它的一種辦法是,將異常以回調(diào)的方式返回。

asyncFunc((err, data) => {
    if(err){
        // ...
        return;
    }

    // ...
});

參考

Error Handling in Node.js

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容