为何await表达式中Promise被拒绝后代码仍继续执行?
问题解析:为何f2抛出错误后日志仍会打印?
核心原因
你的代码里f2函数的写法存在问题:
f2是async函数,但内部只是创建了一个被拒绝的Promise,既没有返回这个Promise,也没有用throw抛出错误。async函数的默认规则是:如果没有显式返回Promise,或者没有主动抛出错误,它会自动返回一个状态为resolved的Promise,值为undefined。- 所以
f1里的await f2()会等待这个resolved的Promise完成,之后就会继续执行后续的console.log,自然就打印出日志了。
修正方案
要让f2触发Promise拒绝,有两种正确写法:
- 返回被拒绝的Promise:
async function f2() { return Promise.reject("promise rejected"); }
- 直接抛出错误(async函数会自动将错误包装为被拒绝的Promise):
async function f2() { throw "promise rejected"; }
修改后,f1中的await会捕获到被拒绝的Promise,后续的console.log就不会执行了(此时控制台会抛出未处理的Promise拒绝错误,你可以给f1添加.catch()来处理)。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

