js实现休眠
使用 setTimeout 和 Promise 实现休眠
在 JavaScript 中,原生没有直接提供类似 sleep() 的休眠函数,但可以通过 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)
在 Node.js 环境中,可以通过 Atomics.wait 实现真正的同步休眠,但这种方式会阻塞主线程,通常不建议在前端使用。
function syncSleep(ms) {
const sharedArray = new SharedArrayBuffer(4);
const sharedInt = new Int32Array(sharedArray);
Atomics.wait(sharedInt, 0, 0, ms);
}
// 使用示例
console.log('开始同步休眠');
syncSleep(3000); // 同步休眠3秒
console.log('同步休眠结束');
使用 while 循环模拟休眠(不推荐)
通过空循环消耗时间可以实现休眠效果,但会严重阻塞主线程,导致页面无响应,仅适用于极端测试场景。

function busyWait(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例
console.log('开始忙等待');
busyWait(1000); // 阻塞1秒
console.log('忙等待结束');
注意事项
- 前端开发推荐使用
Promise+setTimeout方案,兼容性好且不阻塞 UI Atomics.wait需要 Node.js 环境且对 SharedArrayBuffer 有安全限制- 避免使用忙等待方案,会导致性能问题
- 现代浏览器支持
setTimeout的嵌套超时最小延迟(通常 >=4ms)






