javascript中優雅的處理async和await異常

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: 執行失敗,給出錯誤

async函數老是返回promise實例

不管是return了Promise,
仍是內部調用了await,
就算什麼也沒作,它也返回promise;
一個函數,只要被標記了async,那麼它就返回Promise對象
因此上面的handler函數返回的是一個promise實例java

若是一個 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會抓住異常,返回異常結果
 node

相關文章
相關標籤/搜索