javascript中優雅的處理async和await異常
- 2019 年 10 月 8 日
- 筆記
let handler = async function(needErr) { return new Promise((resolve, reject) => { if (needErr) { reject(new Error('執行失敗,給出錯誤')) } else { resolve('執行成功,沒有報錯') } }) } let run = async function() { let result = await handler(false).catch(); console.log(result); result = await handler(true).catch(); console.log(result); } run();
輸出:
執行成功,沒有報錯 (node:3428) UnhandledPromiseRejectionWarning: Error: 執行失敗,給出錯誤
async函數總是返回promise實例
無論是return了Promise, 還是內部調用了await, 就算什麼也沒做,它也返回promise; 一個函數,只要被標記了async,那麼它就返回Promise對象 所以上面的handler函數返回的是一個promise實例
如果一個 async 函數返回的是一個 reject 的 Promise,那麼這個 Promise 依然會繼續被 reject。
這行代碼:let result = await handler(false).catch(); 返回的是resolve狀態的promise result = await handler(true).catch(); 返回的是reject狀態的promise await一個resolve狀態的promise,無論有沒有catch,都直接得到結果 await一個reject狀態的promise,catch會抓住異常,返回異常結果