js 实现sleep
在JavaScript中实现sleep功能可以通过多种方式实现,以下是几种常见的方法:
使用Promise和setTimeout
通过结合Promise和setTimeout,可以实现一个异步的sleep函数:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log('开始等待');
await sleep(2000); // 等待2秒
console.log('等待结束');
}
demo();
使用Generator函数
通过Generator函数和yield关键字,可以实现类似sleep的效果:
function* sleepGenerator(ms) {
yield new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
const sleep = sleepGenerator(2000);
sleep.next().value.then(() => {
console.log('等待结束');
});
使用同步方式(不推荐)
JavaScript是单线程的,同步阻塞会严重影响性能,但可以通过循环实现:
function sleepSync(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例
console.log('开始等待');
sleepSync(2000); // 阻塞2秒
console.log('等待结束');
使用Atomics.wait
适用于Web Worker环境,通过Atomics.wait实现阻塞:

function sleepWorker(ms) {
const sharedArray = new SharedArrayBuffer(4);
const view = new Int32Array(sharedArray);
Atomics.wait(view, 0, 0, ms);
}
// 使用示例(需在Worker中运行)
console.log('开始等待');
sleepWorker(2000); // 阻塞2秒
console.log('等待结束');
注意事项
- 同步方法会阻塞主线程,导致页面无响应,不推荐在浏览器中使用。
Promise和async/await是最常用的异步实现方式。Atomics.wait仅适用于Web Worker环境。






