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();
輸出:javascript
執行成功,沒有報錯 (node:3428) UnhandledPromiseRejectionWarning: Error: 執行失敗,給出錯誤
不管是return了Promise,
仍是內部調用了await,
就算什麼也沒作,它也返回promise;
一個函數,只要被標記了async,那麼它就返回Promise對象
因此上面的handler函數返回的是一個promise實例java
這行代碼:let result = await handler(false).catch();
返回的是resolve狀態的promise
result = await handler(true).catch();
返回的是reject狀態的promise
await一個resolve狀態的promise,不管有沒有catch,都直接獲得結果
await一個reject狀態的promise,catch會抓住異常,返回異常結果
node