js 实现sleep
在JavaScript中实现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();
使用async/await简化调用
async/await语法可以更清晰地处理异步等待:
(async () => {
console.log('等待开始');
await new Promise(resolve => setTimeout(resolve, 3000));
console.log('等待结束');
})();
同步阻塞方式(不推荐)
如果需要同步阻塞(通常不推荐,因为会阻塞主线程),可以使用循环或Atomics.wait(仅限于Node.js或特定环境):
function sleepSync(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
console.log('开始阻塞');
sleepSync(3000); // 阻塞3秒
console.log('阻塞结束');
使用setTimeout回调(传统方式)
传统回调方式适用于不支持Promise的环境:
function sleepWithCallback(ms, callback) {
setTimeout(callback, ms);
}
sleepWithCallback(2000, () => {
console.log('回调执行');
});
注意事项
- 异步
sleep(如Promise)不会阻塞主线程,适合大多数场景。 - 同步
sleep会冻结整个页面,仅用于特殊需求或测试环境。 - Node.js中可以使用
util.promisify结合setTimeout进一步简化代码。







