亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 async/await 捕獲 Promise 中的錯誤

使用 async/await 捕獲 Promise 中的錯誤

繁花如伊 2023-09-28 17:14:02
我試圖用 async/await 捕獲承諾中的錯誤,但以下代碼會導致“未捕獲的錯誤...”function messup() {    var promise = new Promise(function(resolve, reject){        setTimeout(function() {            throw new Error("Thrown from messup()");            resolve('hello from messup function');        }, 1000);    });    return promise;}async function waitForMe() {    try {        await messup();    }catch(e) {        console.log ('*****Error successfully caught! *****');    }}waitForMe()
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

您是從 Promise 回調中拋出錯誤setTimeout,而不是從 Promise 回調中拋出錯誤。與任何其他計時器回調一樣,沒有任何東西可以處理該錯誤,它將直接進入瀏覽器的主機代碼,這可能會將其轉儲到控制臺。


如果您想拒絕返回的承諾,請使用reject:


function messup() {

    var promise = new Promise(function(resolve, reject){

        setTimeout(function() {

            reject(new Error("Thrown from messup()"));

            resolve('hello from messup function'); // This line is pointless now

        }, 1000);

    });

    return promise;

}

如果您希望捕獲計時器回調中的任何同步錯誤并將其傳遞給reject,您可以使用try/catch來實現:


function messup() {

    var promise = new Promise(function(resolve, reject){

        setTimeout(function() {

            try {

                throw new Error("Thrown from messup()");

                resolve('hello from messup function'); // This line will never be reached

            } catch (e) {

                reject(e);

            }

        }, 1000);

    });

    return promise;

}


查看完整回答
反對 回復 2023-09-28
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

Try-catch 與 一起使用時,await專門尋找要履行或拒絕的承諾。


如果您拒絕承諾,而不是拋出與承諾的解決方案無關的錯誤(如您目前的情況),它將通過您當前的設置捕獲。


需要明確的是,您當前拋出的錯誤不會以任何方式插入到您正在運行的異步操作中。


function messup() {

? ? var promise = new Promise(function(resolve, reject){

? ? ? ? setTimeout(function() {

? ? ? ? ? ? reject("Thrown from messup()"); //<-- do this instead

? ? ? ? }, 1000);

? ? });

? ? return promise;

}

進一步閱讀:我在 async/await 指南中詳細介紹了async/await錯誤處理。



查看完整回答
反對 回復 2023-09-28
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號