js 实现睡眠
使用 Promise 和 setTimeout 实现睡眠
在 JavaScript 中实现睡眠功能可以通过 Promise 和 setTimeout 结合实现。这种方法不会阻塞主线程,适合在异步环境中使用。
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log('开始睡眠');
await sleep(2000); // 睡眠2秒
console.log('睡眠结束');
}
demo();
使用 Atomics.wait 实现同步睡眠
如果需要实现同步睡眠(会阻塞主线程),可以使用 Atomics.wait。这种方法适用于 Worker 线程环境,不推荐在主线程使用。
function syncSleep(ms) {
const sharedArray = new SharedArrayBuffer(4);
const sharedInt = new Int32Array(sharedArray);
Atomics.wait(sharedInt, 0, 0, ms);
}
// 使用示例
console.log('开始同步睡眠');
syncSleep(2000); // 同步睡眠2秒
console.log('同步睡眠结束');
使用 async/await 简化异步流程
对于需要连续睡眠的场景,async/await 语法可以让代码更清晰:
async function delayedLog() {
console.log('第一次日志');
await sleep(1000);
console.log('1秒后的日志');
await sleep(1500);
console.log('再1.5秒后的日志');
}
delayedLog();
使用 Date 对象实现忙等待(不推荐)
虽然技术上可行,但忙等待会完全阻塞线程,严重影响性能:

function busyWait(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例(会冻结页面)
console.log('开始忙等待');
busyWait(2000);
console.log('忙等待结束');






