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();

輸出:

執行成功,沒有報錯
(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會抓住異常,返回異常結果
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM