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

如何在JavaScript中正确实现setTimeout的异步顺序执行?

问题:让setTimeout按预期异步顺序执行

原代码如下:

const delayTime = (time) =>
  setTimeout(() => {
    console.log("run after:", time);
  }, time);

const runTime = async () => {
  await delayTime(1000);
  await delayTime(900);
};

runTime();

实际运行结果:

run after: 900
run after: 1000

期望运行结果:

run after: 1000
run after: 900

问题原因

delayTime当前返回的是setTimeout的定时器ID,并不是Promise对象。await只能等待Promise完成,所以这里的两个await不会起到顺序等待的作用,两个定时器会同时启动,900ms的定时器先到期,自然先输出结果。

修改方案

把delayTime改成返回Promise的函数,让await能够正确等待定时器执行完成后,再启动下一个定时器:

const delayTime = (time) =>
  new Promise(resolve => {
    setTimeout(() => {
      console.log("run after:", time);
      resolve();
    }, time);
  });

const runTime = async () => {
  await delayTime(1000);
  await delayTime(900);
};

runTime();

这样修改后,第一个定时器等待1000ms执行输出后,才会启动第二个900ms的定时器,最终输出顺序就符合预期了。

内容的提问来源于stack exchange,提问作者Luân Nguyễn Thế

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:25:28