当前位置:首页 > JavaScript

js 实现异步队列

2026-04-04 18:26:55JavaScript

异步队列的实现方法

在JavaScript中,异步队列通常用于控制异步任务的执行顺序,确保任务按特定顺序或条件依次执行。以下是几种常见的实现方式:

使用Promise链式调用

通过Promise的链式调用特性,可以确保异步任务按顺序执行。每个任务完成后触发下一个任务。

function asyncQueue(tasks) {
  return tasks.reduce((promiseChain, currentTask) => {
    return promiseChain.then(chainResults => 
      currentTask().then(currentResult => 
        [...chainResults, currentResult]
      )
    );
  }, Promise.resolve([]));
}

基于async/await的实现

利用async/await语法可以更直观地编写异步队列代码,保持代码的可读性。

async function asyncQueue(tasks) {
  const results = [];
  for (const task of tasks) {
    results.push(await task());
  }
  return results;
}

使用队列数据结构

手动维护一个队列,通过递归或循环的方式依次处理队列中的任务。

class AsyncQueue {
  constructor() {
    this.queue = [];
    this.isProcessing = false;
  }

  enqueue(task) {
    this.queue.push(task);
    if (!this.isProcessing) this.process();
  }

  async process() {
    this.isProcessing = true;
    while (this.queue.length > 0) {
      const task = this.queue.shift();
      await task();
    }
    this.isProcessing = false;
  }
}

带并发控制的异步队列

限制同时执行的异步任务数量,避免资源过载。

js 实现异步队列

async function asyncQueue(tasks, concurrency = 1) {
  const results = [];
  const executing = new Set();

  for (const task of tasks) {
    const p = task().then(res => {
      executing.delete(p);
      return res;
    });
    executing.add(p);
    results.push(p);

    if (executing.size >= concurrency) {
      await Promise.race(executing);
    }
  }

  return Promise.all(results);
}

注意事项

  • 错误处理:需要为每个任务添加catch处理,避免单个任务失败导致整个队列中断
  • 内存管理:长时间运行的队列需注意内存泄漏问题
  • 取消机制:实现任务取消功能时需清除队列中未执行的任务

以上方法可根据具体需求选择使用,Promise链式调用适合简单场景,async/await代码更易读,队列类实现更灵活,并发控制适用于资源敏感场景。

标签: 队列js
分享给朋友:

相关文章

js实现祖玛

js实现祖玛

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

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…