js实现sleep暂停
在JavaScript中实现类似其他语言的sleep暂停功能,可以通过以下几种方式实现:
使用setTimeout与Promise
通过结合Promise和setTimeout实现异步暂停,适用于现代JavaScript环境:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 使用示例
async function demo() {
console.log("开始暂停");
await sleep(2000); // 暂停2秒
console.log("暂停结束");
}
demo();
使用setTimeout回调
传统回调方式实现延迟执行,不阻塞后续代码:
function sleep(callback, ms) {
setTimeout(callback, ms);
}
// 使用示例
sleep(() => {
console.log("暂停后执行");
}, 1000);
同步阻塞方案(不推荐)
通过循环阻塞主线程实现同步暂停,但会严重影响性能:
function sleepSync(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
// 使用示例(谨慎使用)
console.log("开始阻塞");
sleepSync(3000); // 阻塞3秒
console.log("阻塞结束");
注意事项
- 异步方案(
Promise/setTimeout)是非阻塞的,适合大多数场景。 - 同步方案会冻结页面,仅适用于特殊场景如Web Worker。
- Node.js环境可使用
util.promisify(setTimeout)简化实现。







