当前位置:首页 > JavaScript

js异步实现暂停

2026-03-15 13:44:21JavaScript

异步暂停的实现方法

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

使用Promise和setTimeout

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

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关键字暂停执行,适合需要更精细控制异步流程的场景。

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请求等场景。

js异步实现暂停

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实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

vue实现js休眠

vue实现js休眠

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