当前位置:首页 > JavaScript

js怎么实现异步并行

2026-03-01 18:49:47JavaScript

异步并行实现方法

在JavaScript中实现异步并行操作通常涉及以下几种方法:

Promise.all()

使用Promise.all()可以并行执行多个Promise,并在所有Promise都完成时返回结果数组。若其中一个Promise被拒绝,整个Promise.all()会立即拒绝。

js怎么实现异步并行

const promise1 = fetch('https://api.example.com/data1');
const promise2 = fetch('https://api.example.com/data2');
const promise3 = fetch('https://api.example.com/data3');

Promise.all([promise1, promise2, promise3])
  .then(values => {
    console.log(values); // 所有请求结果的数组
  })
  .catch(error => {
    console.error(error); // 任一请求失败时的错误
  });

Promise.allSettled()

Promise.all()不同,Promise.allSettled()会等待所有Promise完成(无论成功或失败),并返回每个Promise的状态和结果。

Promise.allSettled([promise1, promise2, promise3])
  .then(results => {
    results.forEach(result => {
      if (result.status === 'fulfilled') {
        console.log(result.value);
      } else {
        console.error(result.reason);
      }
    });
  });

async/await结合Promise.all()

async函数中,可以使用await Promise.all()实现并行异步操作。

js怎么实现异步并行

async function fetchAllData() {
  try {
    const [data1, data2, data3] = await Promise.all([promise1, promise2, promise3]);
    console.log(data1, data2, data3);
  } catch (error) {
    console.error(error);
  }
}

并行循环处理

对于需要并行处理数组中的每个元素的情况,可以结合map()Promise.all()

const urls = ['url1', 'url2', 'url3'];
const fetchPromises = urls.map(url => fetch(url));

Promise.all(fetchPromises)
  .then(responses => Promise.all(responses.map(res => res.json())))
  .then(data => console.log(data));

限制并发数

在某些场景下需要限制并发数,可以使用第三方库(如p-limit)或自定义实现。

const limit = require('p-limit');
const concurrencyLimit = limit(2); // 限制并发数为2

const tasks = [
  concurrencyLimit(() => fetch('url1')),
  concurrencyLimit(() => fetch('url2')),
  concurrencyLimit(() => fetch('url3'))
];

Promise.all(tasks)
  .then(results => console.log(results));

注意事项

  • 并行操作会同时发起多个请求或任务,需注意资源消耗和速率限制。
  • 在Node.js中,文件I/O或CPU密集型任务可以使用worker_threads实现真正的并行。
  • 浏览器环境中,大量并行请求可能会触发HTTP/2的多路复用限制。

标签: js
分享给朋友:

相关文章

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…

js实现导航菜单

js实现导航菜单

使用HTML和CSS创建基础结构 导航菜单的基础结构通常由HTML的无序列表(<ul>)和列表项(<li>)组成,每个列表项包含一个链接(<a>)。CSS用于样式化…