js实现休眠
使用 setTimeout 和 Promise 实现休眠
在 JavaScript 中可以通过 setTimeout 结合 Promise 实现休眠功能。这种方式是非阻塞的,适用于异步环境。

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log('开始休眠');
await sleep(2000); // 休眠2秒
console.log('休眠结束');
}
demo();
使用 Atomics.wait 实现同步休眠
对于需要同步休眠的场景(如在 Node.js 或 Web Worker 中),可以使用 Atomics.wait API。这种方式会阻塞主线程。
function sleepSync(ms) {
const sharedArray = new Int32Array(new SharedArrayBuffer(4));
Atomics.wait(sharedArray, 0, 0, ms);
}
// 使用示例
console.log('开始同步休眠');
sleepSync(3000); // 同步休眠3秒
console.log('同步休眠结束');
使用 Date 对象实现忙等待
虽然不推荐,但在某些特殊情况下可以使用基于 Date 的忙等待实现休眠。这种方式会持续占用 CPU。
function busySleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例
console.log('开始忙等待');
busySleep(1000); // 忙等待1秒
console.log('忙等待结束');
注意事项
- 在浏览器环境中,主线程的同步休眠会冻结 UI,应优先使用
Promise方案 Atomics.wait需要运行在支持 SharedArrayBuffer 的环境中- 忙等待方案会严重影响性能,仅适用于特殊测试场景
- Node.js 环境下可以考虑使用
setImmediate或process.nextTick进行微调







