js实现sleep暂停
实现 sleep 暂停的方法
在 JavaScript 中,没有内置的 sleep 函数,但可以通过以下几种方式实现类似功能。
使用 setTimeout 和回调
通过 setTimeout 结合回调函数实现延迟执行。
function sleep(callback, delay) {
setTimeout(callback, delay);
}
sleep(() => {
console.log('执行延迟操作');
}, 1000);
使用 Promise 和 async/await
通过 Promise 和 async/await 实现更简洁的异步延迟。
function sleep(delay) {
return new Promise(resolve => setTimeout(resolve, delay));
}
async function run() {
console.log('开始');
await sleep(1000);
console.log('延迟 1 秒后执行');
}
run();
使用生成器函数
通过生成器函数和 yield 实现延迟控制。
function* sleepGenerator(delay) {
yield new Promise(resolve => setTimeout(resolve, delay));
}
const gen = sleepGenerator(1000);
gen.next().value.then(() => {
console.log('延迟 1 秒后执行');
});
使用 Atomics.wait
通过 Atomics.wait 实现同步阻塞(仅适用于 Node.js 环境)。
function sleep(delay) {
const sharedArray = new SharedArrayBuffer(4);
const sharedView = new Int32Array(sharedArray);
Atomics.wait(sharedView, 0, 0, delay);
}
console.log('开始');
sleep(1000);
console.log('延迟 1 秒后执行');
使用 busy-waiting(不推荐)
通过循环占用 CPU 实现阻塞,但会严重影响性能。

function sleep(delay) {
const start = Date.now();
while (Date.now() - start < delay) {}
}
console.log('开始');
sleep(1000);
console.log('延迟 1 秒后执行');
注意事项
- 在浏览器环境中,推荐使用
Promise和async/await,避免阻塞主线程。 - 在 Node.js 中,可以使用
Atomics.wait或setTimeout。 - 避免使用
busy-waiting,因为它会严重降低性能。






