js 实现暂停
实现 JavaScript 暂停功能的方法
在 JavaScript 中实现暂停功能通常需要模拟同步等待的效果,因为 JavaScript 是单线程语言,直接使用 sleep 会阻塞整个线程。以下是几种常见的方法:
使用 setTimeout 实现异步暂停
通过 setTimeout 可以实现非阻塞的延迟执行:
function pause(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
async function run() {
console.log('开始');
await pause(2000); // 暂停2秒
console.log('结束');
}
run();
使用 Promise 和 async/await
结合 Promise 和 async/await 可以更优雅地实现暂停:
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function example() {
console.log('第一步');
await delay(1000);
console.log('第二步');
}
example();
使用循环模拟同步暂停(不推荐)
这种方法会阻塞主线程,可能导致页面无响应:
function sleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
console.log('开始');
sleep(3000); // 暂停3秒
console.log('结束');
使用 Generator 函数
通过 Generator 函数可以实现更复杂的暂停逻辑:
function* pausedExecution() {
console.log('第一步');
yield new Promise(resolve => setTimeout(resolve, 1000));
console.log('第二步');
}
const generator = pausedExecution();
generator.next().value.then(() => generator.next());
注意事项
- 避免在主线程中使用同步暂停方法,这会冻结页面。
- 在 Node.js 环境中可以使用
util.promisify和setTimeout结合。 - 现代浏览器和 Node.js 都支持
async/await,推荐优先使用这种方法。







