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

为何Date.now()未按预期执行?自定义sleep函数耗时远超预期

问题原因解析

你的代码里的sleep函数是同步阻塞的死循环,导致实际耗时远超预期的核心原因有两点:

  • JavaScript是单线程语言,主线程会被这个while循环完全占用,只有等循环彻底结束,才会去执行后面的bar()。
  • 你设定的3 * 1000是循环结束的时间阈值,但循环里一直在反复调用foo(),foo()中的console.log('foo')属于IO操作,每次执行都要消耗额外时间。原本空转的while循环可能确实会在3秒左右结束,但加上频繁的console.log输出后,每一轮循环的耗时都被拉长,最终导致整个循环跑完的总时间远超设定的3秒,也就出现了耗时约50秒才执行bar()的情况。

如果要实现延迟执行的需求,完全不应该用这种同步阻塞的写法,JavaScript里有专门的异步API可以实现,比如setTimeout,示例如下:

function sleep(callback, delay) {
  setTimeout(callback, delay);
}

function foo() {
  console.log('foo');
}

function bar() {
  console.log('bar');
}

// 这样foo会在3秒后执行,bar会立刻执行
sleep(foo, 3 * 1000);
bar();

如果需要bar()在3秒后和foo()先后执行,可以用Promise配合async/await:

function sleep(delay) {
  return new Promise(resolve => setTimeout(resolve, delay));
}

async function run() {
  await sleep(3 * 1000);
  console.log('foo');
  console.log('bar');
}

run();

内容的提问来源于stack exchange,提问作者Alpaca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:35:24