当前位置:首页 > JavaScript

js如何实现并发请求

2026-03-01 16:34:20JavaScript

使用 Promise.all 实现并发请求

Promise.all 可以并行执行多个异步请求,并在所有请求完成后统一处理结果。传入一个包含多个 Promise 的数组,返回一个新的 Promise,当所有请求都成功时才会 resolve。

const request1 = fetch('https://api.example.com/data1');
const request2 = fetch('https://api.example.com/data2');
const request3 = fetch('https://api.example.com/data3');

Promise.all([request1, request2, request3])
  .then(responses => {
    // 所有请求完成后的处理
    console.log(responses);
  })
  .catch(error => {
    // 任一请求失败的处理
    console.error(error);
  });

使用 Promise.allSettled 处理可能失败的请求

与 Promise.all 不同,Promise.allSettled 会等待所有 Promise 完成,无论成功或失败。返回一个数组,包含每个 Promise 的状态和结果。

const requests = [
  fetch('https://api.example.com/data1'),
  fetch('https://api.example.com/data2'),
  fetch('https://api.example.com/data3')
];

Promise.allSettled(requests)
  .then(results => {
    results.forEach(result => {
      if (result.status === 'fulfilled') {
        console.log('成功:', result.value);
      } else {
        console.log('失败:', result.reason);
      }
    });
  });

使用 async/await 结合并发请求

async/await 可以与 Promise.all 结合使用,使代码更简洁易读。

async function fetchConcurrently() {
  try {
    const [response1, response2] = await Promise.all([
      fetch('https://api.example.com/data1'),
      fetch('https://api.example.com/data2')
    ]);
    const data1 = await response1.json();
    const data2 = await response2.json();
    console.log(data1, data2);
  } catch (error) {
    console.error(error);
  }
}

fetchConcurrently();

限制并发数量的实现

当需要控制并发请求数量时,可以使用第三方库如 p-limit,或者手动实现并发控制。

async function limitedConcurrency(urls, limit) {
  const results = [];
  const executing = [];

  for (const url of urls) {
    const p = fetch(url).then(res => {
      executing.splice(executing.indexOf(p), 1);
      return res.json();
    });

    executing.push(p);
    results.push(p);

    if (executing.length >= limit) {
      await Promise.race(executing);
    }
  }

  return Promise.all(results);
}

limitedConcurrency(['url1', 'url2', 'url3'], 2)
  .then(data => console.log(data));

使用 Axios 实现并发请求

如果使用 Axios 库,并发请求的实现方式类似。

js如何实现并发请求

const axios = require('axios');

const request1 = axios.get('https://api.example.com/data1');
const request2 = axios.get('https://api.example.com/data2');

Promise.all([request1, request2])
  .then(responses => {
    console.log(responses[0].data, responses[1].data);
  })
  .catch(error => {
    console.error(error);
  });

以上方法涵盖了 JavaScript 中实现并发请求的主要场景,根据具体需求选择合适的方式。

标签: 如何实现js
分享给朋友:

相关文章

vue如何实现滚动

vue如何实现滚动

Vue 实现滚动的方法 使用原生 JavaScript 方法 在 Vue 中可以通过 window.scrollTo 或 Element.scrollIntoView 实现滚动。例如,滚动到页面顶部:…

js实现复制功能

js实现复制功能

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

如何实现vue

如何实现vue

安装 Vue.js 使用 npm 或 yarn 安装 Vue.js。确保已安装 Node.js 环境。 npm install vue # 或 yarn add vue 创建 Vue 实例 在 HT…

vue如何实现增删

vue如何实现增删

使用 Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是具体实现方法: 数据定义与初始化 在 Vue 组件的 data 选项中定义数组来存储需要操作的数据项…

java如何实现多态

java如何实现多态

多态的概念 多态是面向对象编程的三大特性之一(封装、继承、多态),指同一操作作用于不同对象时,可以产生不同的行为。Java中主要通过方法重写(Override)和接口/抽象类实现多态。 实现多态的三…

如何实现java序列化

如何实现java序列化

实现Java序列化的方法 1. 实现Serializable接口 要使一个类可序列化,需要让该类实现java.io.Serializable接口。这是一个标记接口,没有任何方法需要实现。 publi…