为了账号安全,请及时绑定邮箱和手机立即绑定

使用 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 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信