当前位置:首页 > JavaScript

js实现暂停代码

2026-03-16 08:27:07JavaScript

使用 setTimeoutclearTimeout

通过 setTimeout 设置延迟执行,配合 clearTimeout 取消执行,可以实现暂停效果。定义一个变量存储计时器 ID,调用 clearTimeout 即可暂停。

let timerId;

function startTask() {
  timerId = setTimeout(() => {
    console.log("Task executed");
  }, 3000);
}

function pauseTask() {
  clearTimeout(timerId);
}

使用 Promiseasync/await

通过 Promiseasync/await 结合,可以更灵活地控制代码暂停。创建一个可解析的 Promise,在需要暂停时通过外部控制决定何时继续。

js实现暂停代码

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

对于动画或高频任务,通过 requestAnimationFramecancelAnimationFrame 实现暂停。存储帧 ID 后取消即可暂停。

js实现暂停代码

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();
}

每种方法适用于不同场景,根据需求选择最合适的实现方式。

标签: 代码js
分享给朋友:

相关文章

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…