You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何await表达式中Promise被拒绝后代码仍继续执行?

问题解析:为何f2抛出错误后日志仍会打印?

核心原因

你的代码里f2函数的写法存在问题:

  • f2是async函数,但内部只是创建了一个被拒绝的Promise,既没有返回这个Promise,也没有用throw抛出错误。
  • async函数的默认规则是:如果没有显式返回Promise,或者没有主动抛出错误,它会自动返回一个状态为resolved的Promise,值为undefined。
  • 所以f1里的await f2()会等待这个resolved的Promise完成,之后就会继续执行后续的console.log,自然就打印出日志了。

修正方案

要让f2触发Promise拒绝,有两种正确写法:

  1. 返回被拒绝的Promise:
async function f2() {
    return Promise.reject("promise rejected");
}
  1. 直接抛出错误(async函数会自动将错误包装为被拒绝的Promise):
async function f2() {
    throw "promise rejected";
}

修改后,f1中的await会捕获到被拒绝的Promise,后续的console.log就不会执行了(此时控制台会抛出未处理的Promise拒绝错误,你可以给f1添加.catch()来处理)。

内容的提问来源于stack exchange,提问作者Prashant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:52:03