js实现暂停代码
使用 setTimeout 和 clearTimeout
通过 setTimeout 设置延迟执行,配合 clearTimeout 取消执行,可以实现暂停效果。定义一个变量存储计时器 ID,调用 clearTimeout 即可暂停。
let timerId;
function startTask() {
timerId = setTimeout(() => {
console.log("Task executed");
}, 3000);
}
function pauseTask() {
clearTimeout(timerId);
}
使用 Promise 和 async/await
通过 Promise 和 async/await 结合,可以更灵活地控制代码暂停。创建一个可解析的 Promise,在需要暂停时通过外部控制决定何时继续。

let resume;
const pausePromise = new Promise(resolve => {
resume = resolve;
});
async function runTask() {
console.log("Task started");
await pausePromise; // 暂停点
console.log("Task resumed");
}
// 调用 resume() 恢复执行
function resumeTask() {
resume();
}
使用 Generator 函数
Generator 函数通过 yield 关键字暂停执行,调用 next() 方法恢复执行。适合需要分步控制的场景。
function* taskGenerator() {
console.log("Step 1");
yield;
console.log("Step 2");
}
const task = taskGenerator();
task.next(); // 执行到第一个 yield 暂停
task.next(); // 恢复执行到结束
使用 requestAnimationFrame
对于动画或高频任务,通过 requestAnimationFrame 和 cancelAnimationFrame 实现暂停。存储帧 ID 后取消即可暂停。

let animationId;
function animate() {
console.log("Animating...");
animationId = requestAnimationFrame(animate);
}
function pauseAnimation() {
cancelAnimationFrame(animationId);
}
使用 AbortController
现代浏览器支持 AbortController,可中断 fetch 或异步任务。通过 signal 触发中止实现暂停。
const controller = new AbortController();
async function fetchData() {
try {
const response = await fetch("url", { signal: controller.signal });
console.log(await response.json());
} catch (e) {
if (e.name === "AbortError") {
console.log("Fetch paused");
}
}
}
function pauseFetch() {
controller.abort();
}
使用 Worker 线程
在 Web Worker 中运行耗时任务,通过 terminate() 暂停或销毁 Worker。重新创建 Worker 可恢复执行。
let worker = new Worker("task.js");
function pauseWorker() {
worker.terminate();
}
每种方法适用于不同场景,根据需求选择最合适的实现方式。





