JavaScript async/await问题:为何仅输出3...?如何实现全部依次打印
问题原因
你编写的三个timer函数返回的Promise都没有调用resolve()方法。await的作用是等待Promise状态变为fulfilled,但你的Promise始终处于pending状态,导致第一个await timer3()执行后,后续的await timer2()和await timer1()永远不会被触发,只有timer3内部setTimeout的回调能正常打印内容。
修复方案
在每个setTimeout的回调函数里调用Promise的resolve(),让Promise完成状态转换,这样await才能继续执行后续代码。修正后的代码如下:
function timer1(){ return new Promise((resolve)=>{ setTimeout(() => { console.log("1..."); resolve(); }, 1000); }) } function timer2(){ return new Promise((resolve)=>{ setTimeout(() => { console.log("2..."); resolve(); }, 2000); }) } function timer3(){ return new Promise((resolve)=>{ setTimeout(() => { console.log("3..."); resolve(); }, 3000); }) } async function timers(){ await timer3(); await timer2(); await timer1(); } timers();
执行结果
修正后运行代码,会按照你期望的顺序输出:
(After 3 seconds..) 3... (After 2 seconds..) 2... (After 1 seconds..) 1...
内容的提问来源于stack exchange,提问作者ghshin
相关产品推荐
相关产品推荐

