当前位置:首页 > 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实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现vr

js实现vr

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

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…