js sleep 实现
使用 Promise 和 setTimeout
JavaScript 本身没有内置的 sleep 函数,但可以通过 Promise 和 setTimeout 实现类似功能。以下是一个简单的实现:

function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log('开始');
await sleep(2000);
console.log('2秒后');
}
demo();
同步阻塞方式(不推荐)
虽然不推荐在生产环境中使用,但在某些测试场景可能需要同步阻塞:

function sleepSync(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例
console.log('开始');
sleepSync(2000); // 会阻塞整个线程
console.log('2秒后');
使用 Atomics.wait
Node.js 环境中可以使用更底层的 API:
function sleep(ms) {
const sharedArrayBuffer = new SharedArrayBuffer(4);
const view = new Int32Array(sharedArrayBuffer);
Atomics.wait(view, 0, 0, ms);
}
// 使用示例
console.log('开始');
sleep(2000);
console.log('2秒后');
使用 async/await 的循环延迟
对于需要重复执行的延迟操作:
async function delayedLoop() {
for (let i = 0; i < 5; i++) {
console.log(`计数: ${i}`);
await new Promise(res => setTimeout(res, 1000));
}
}
delayedLoop();
注意事项
- 异步 sleep 不会阻塞事件循环,适合大多数场景
- 同步 sleep 会完全阻塞 JavaScript 执行线程
- Node.js 环境有更多选择如 util.promisify(setTimeout)
- 浏览器环境中避免使用同步方法,会导致页面无响应






