js 实现休眠
使用 Promise 和 setTimeout 实现休眠
在 JavaScript 中,可以使用 Promise 和 setTimeout 组合实现休眠功能。这种方法不会阻塞主线程,适合在异步环境中使用。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log('开始休眠');
await sleep(2000);
console.log('休眠结束');
}
使用 Atomics.wait 实现同步休眠
对于需要真正阻塞线程的场景(如 Worker 线程),可以使用 Atomics.wait。这种方法会真正阻塞当前线程,但只能在 Web Worker 中使用。
function syncSleep(ms) {
const buffer = new SharedArrayBuffer(4);
const view = new Int32Array(buffer);
Atomics.wait(view, 0, 0, ms);
}
// 使用示例(必须在 Worker 线程中)
console.log('开始同步休眠');
syncSleep(2000);
console.log('同步休眠结束');
使用循环阻塞实现(不推荐)
虽然不推荐在生产环境使用,但通过循环检查时间戳可以实现简单的阻塞式休眠。这种方法会完全阻塞主线程,导致页面无响应。

function busySleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例
console.log('开始忙等待');
busySleep(2000);
console.log('忙等待结束');
注意事项
- 前端开发中推荐使用 Promise 方案,避免阻塞 UI 线程
- Node.js 环境可以使用
util.promisify(setTimeout)或timers/promises模块 - 同步休眠方案仅适用于特定场景,大部分情况下应使用异步方案






