js实现睡眠
实现 JavaScript 睡眠的几种方法
在 JavaScript 中实现睡眠(延迟执行)可以通过以下几种方式实现:
使用 setTimeout 和 Promise
通过结合 setTimeout 和 Promise 可以创建一个异步的睡眠函数,适用于现代 JavaScript 环境(ES6+)。

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log('开始睡眠');
await sleep(2000); // 睡眠 2 秒
console.log('睡眠结束');
}
demo();
使用 setTimeout 回调
传统的回调方式,适用于不支持 Promise 的环境。

function sleep(ms, callback) {
setTimeout(callback, ms);
}
// 使用示例
console.log('开始睡眠');
sleep(2000, function() {
console.log('睡眠结束');
});
使用 Atomics.wait(同步阻塞)
Atomics.wait 可以实现同步阻塞睡眠,但通常不推荐在主线程中使用,因为它会完全阻塞线程。
function sleep(ms) {
const sharedArrayBuffer = new SharedArrayBuffer(4);
const view = new Int32Array(sharedArrayBuffer);
Atomics.wait(view, 0, 0, ms);
}
// 使用示例
console.log('开始睡眠');
sleep(2000); // 阻塞 2 秒
console.log('睡眠结束');
使用 async/await 循环
通过循环检查时间差实现精确睡眠,但会占用 CPU 资源,不推荐用于生产环境。
function sleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例
console.log('开始睡眠');
sleep(2000); // 阻塞 2 秒
console.log('睡眠结束');
注意事项
- 推荐使用
Promise和setTimeout的方式,因为它不会阻塞主线程。 - 避免在主线程中使用同步阻塞方法(如
Atomics.wait或循环检查),否则会导致页面无响应。 - 在 Node.js 环境中,还可以使用
util.promisify结合setTimeout实现睡眠功能。






