当前位置:首页 > JavaScript

js异步实现暂停

2026-03-15 13:44:21JavaScript

异步暂停的实现方法

在JavaScript中实现异步操作的暂停可以通过多种方式完成,以下是几种常见的方法:

使用Promise和setTimeout

通过结合Promise和setTimeout可以模拟异步暂停的效果。创建一个返回Promise的函数,利用setTimeout在指定时间后resolve。

js异步实现暂停

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function demo() {
  console.log('开始');
  await sleep(2000); // 暂停2秒
  console.log('结束');
}
demo();

使用Generator函数

Generator函数可以通过yield关键字暂停执行,适合需要更精细控制异步流程的场景。

js异步实现暂停

function* asyncTask() {
  console.log('步骤1');
  yield new Promise(resolve => setTimeout(resolve, 1000));
  console.log('步骤2');
}

const gen = asyncTask();
gen.next().value.then(() => gen.next());

使用async/await与条件判断

结合async/await和条件变量可以实现基于条件的暂停,适用于需要等待特定条件满足的场景。

let isPaused = false;

async function run() {
  while (true) {
    if (isPaused) {
      await new Promise(resolve => setTimeout(resolve, 100));
      continue;
    }
    console.log('运行中');
    await sleep(500);
  }
}

// 外部控制
setTimeout(() => { isPaused = true; }, 2000);
setTimeout(() => { isPaused = false; }, 4000);
run();

使用AbortController

对于需要取消的异步操作,AbortController提供了一种标准的中断机制,适合fetch请求等场景。

const controller = new AbortController();
const signal = controller.signal;

async function fetchData() {
  try {
    const response = await fetch('url', { signal });
    console.log(await response.json());
  } catch (e) {
    if (e.name === 'AbortError') {
      console.log('请求已中止');
    }
  }
}

// 中止请求
setTimeout(() => controller.abort(), 1000);
fetchData();

注意事项

  • Promise方案适合简单的延迟场景,但无法中途取消。
  • Generator方案提供更细粒度控制,但需要手动管理迭代器。
  • 条件变量方案适合需要响应外部状态的场景,注意避免忙等待。
  • 浏览器环境下优先考虑AbortController这类标准API。

标签: js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

vue实现js休眠

vue实现js休眠

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

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…