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

如何实现类似fs.writeFileSync的同步阻塞函数setTimeoutSync

实现 setTimeoutSync 阻塞主线程

实现代码

function setTimeoutSync(callback, delay) {
  const sharedBuffer = new SharedArrayBuffer(4);
  const int32Array = new Int32Array(sharedBuffer);

  setTimeout(() => {
    callback();
    Atomics.notify(int32Array, 0);
  }, delay);

  Atomics.wait(int32Array, 0, 0);
}

使用示例(index.js)

console.log('Start');
setTimeoutSync(() => {
  console.log('Job done');
}, 500);
console.log('End');

原理说明

  • 利用SharedArrayBuffer创建共享内存,配合Atomics API实现主线程的阻塞与唤醒:
    1. Atomics.wait会让当前主线程进入休眠状态,直到其他执行上下文(这里是setTimeout的回调)调用Atomics.notify
    2. setTimeout回调执行完毕后,通过Atomics.notify唤醒被阻塞的主线程,后续代码才会继续执行
  • 该实现完全匹配需求:无需async/await、不依赖第三方库、行为和fs.writeFileSync一致,调用时会阻塞主线程直到异步任务完成。

内容的提问来源于stack exchange,提问作者TechDogLover OR kiaNasirzadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:24:53