You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:12:02