为什么JavaScript异步函数执行中途停止?
代码仅打印“Hello world”的原因分析
这段代码的问题核心出在第一个await对应的Promise上:
- 创建
new Promise(() => { console.log('Hello world') })时,传入的执行器函数里没有调用resolve或reject方法,导致这个Promise始终处于pending(等待)状态。 await关键字的逻辑是:必须等待Promise的状态变为fulfilled(已完成)或rejected(已拒绝),才会继续执行后续代码。- 由于第一个Promise一直卡在
pending状态,await会无限期等待,后面的console.log('debug1')、第二个Promise以及console.log('finish')永远没有执行机会。
如果要让后续代码正常运行,只需在第一个Promise的执行器里调用resolve即可,修改后的代码示例:
async function main () { await new Promise((resolve) => { console.log('Hello world') resolve() }) console.log('debug1') await new Promise(r => setTimeout(r, 1000)); console.log('finish') } main()
内容的提问来源于stack exchange,提问作者Xmajkl
相关产品推荐
相关产品推荐

