js sleep 实现
使用 setTimeout 和 Promise
通过 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();
使用 setTimeout 回调(传统方式)
适用于不需要 Promise 的环境,通过回调函数实现延迟执行。

function sleep(ms, callback) {
setTimeout(callback, ms);
}
// 用法示例
console.log('开始等待');
sleep(2000, () => {
console.log('等待结束');
});
使用 Atomics.wait(Node.js 环境)
适用于 Node.js 的原子操作 API,但会阻塞主线程,通常不推荐用于生产环境。
function sleep(ms) {
const sharedArray = new SharedArrayBuffer(4);
const sharedInt = new Int32Array(sharedArray);
Atomics.wait(sharedInt, 0, 0, ms);
}
// 用法示例
console.log('开始等待');
sleep(2000); // 阻塞2秒
console.log('等待结束');
使用 while 循环(不推荐)
通过阻塞主线程实现延迟,但会导致性能问题,仅用于演示目的。
function sleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 用法示例
console.log('开始等待');
sleep(2000); // 阻塞2秒
console.log('等待结束');
注意事项
- 优先选择
Promise+setTimeout方案,兼容性强且不阻塞主线程。 while循环和Atomics.wait会阻塞主线程,可能影响页面响应或服务性能。- Node.js 中可使用
util.promisify(setTimeout)简化Promise封装。






