async/await疑问:为何await后的console.log完全不打印?
问题原因分析
你的代码里,await 等待的那个 Promise 始终没有被决议(resolve),导致异步流程一直卡在这个等待环节,后面的 console.log("Last") 自然永远不会执行。
具体来说,你创建 Promise 时传入的 executor 函数里,只在 setTimeout 里打印了 "Async!!!",但完全没调用 resolve() 方法。await 的逻辑是:必须等到 Promise 对象的状态从 pending 变为 fulfilled(调用resolve)或者 rejected(调用reject),才会继续执行后面的代码。你的这个 Promise 一直处于 pending 状态,所以后续代码被永久阻塞了。
修正后的代码示例
如果要让 "Last" 正常输出,需要在 setTimeout 里调用 resolve():
async function printMe() { console.log("First") await new Promise (resolve => { setTimeout(() => { console.log("Async!!!") resolve() // 调用resolve,让Promise状态变为fulfilled }, 3000) }) console.log("Last") } printMe()
这样,3秒后打印完 "Async!!!",Promise 被决议,await 结束等待,后续的 "Last" 就会正常输出了。
内容的提问来源于stack exchange,提问作者Romi Tsimerman
相关产品推荐
相关产品推荐

