js 实现暂停
暂停 JavaScript 执行的常见方法
使用 setTimeout 或 Promise 结合 async/await 实现延迟执行,模拟暂停效果。例如:

async function pauseExecution(ms) {
await new Promise(resolve => setTimeout(resolve, ms));
}
// 使用方式
async function demo() {
console.log("开始");
await pauseExecution(2000); // 暂停2秒
console.log("结束");
}
demo();
通过生成器函数控制流程
利用生成器函数(Generator)的 yield 特性暂停代码执行,直到手动触发恢复:

function* pausableFunction() {
console.log("步骤1");
yield; // 暂停点
console.log("步骤2");
}
const generator = pausableFunction();
generator.next(); // 执行到第一个yield
setTimeout(() => generator.next(), 1000); // 1秒后继续
使用 Atomics.wait 实现线程级暂停(仅限 Node.js)
在 Node.js 的 Worker Threads 中,可通过共享内存和 Atomics 实现精确暂停:
const { Worker, isMainThread } = require('worker_threads');
if (isMainThread) {
const sharedBuffer = new SharedArrayBuffer(4);
new Worker(__filename, { workerData: sharedBuffer });
} else {
const sharedArray = new Int32Array(workerData);
console.log("Worker 开始");
Atomics.wait(sharedArray, 0, 0, 2000); // 暂停2秒
console.log("Worker 继续");
}
事件循环阻塞(不推荐)
通过同步阻塞事件循环实现暂停,但会冻结整个线程:
function blockPause(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}
console.log("开始");
blockPause(3000); // 阻塞3秒
console.log("结束");
注意事项
- 浏览器环境中避免使用同步阻塞方法,会导致页面无响应
- Web Worker 中可使用
Atomics.wait,但主线程不支持 - 现代前端应用推荐使用
async/await方案,兼容性良好且不阻塞 UI






