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會抓住異常,返回異常結果