为何await语句后console.log(123)未被调用?技术咨询
问题解答:为何await sleep后代码未执行?
你的代码核心问题是sleep函数返回的Promise从未被resolve。
await的工作逻辑是:必须等待对应的Promise状态变为fulfilled(即调用resolve()方法),才会继续执行await之后的代码。而你写的sleep函数中,setTimeout回调里只执行了console.log("abc"),完全没有调用resolve(),导致这个Promise一直处于pending(等待)状态,await会一直挂起,后面的console.log(123)自然永远不会被执行。
修复方法很简单,在setTimeout的回调里加上resolve()调用,让Promise完成状态切换:
const sleep = ms => new Promise( resolve => setTimeout(() => { console.log("abc") resolve(); // 调用resolve,标记Promise完成 }, ms) ); async function start() { await sleep(1000) console.log(123) } start()
这样修改后,1秒后会先打印"abc",接着Promise被resolve,await结束等待,后续的console.log(123)就会正常执行了。
内容的提问来源于stack exchange,提问作者Max Pattern
相关产品推荐
相关产品推荐

