当前位置:首页 > 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 库,并发请求的实现方式类似。

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如何实现并发请求

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

相关文章

vue自动登录如何实现

vue自动登录如何实现

实现自动登录的基本思路 自动登录通常通过结合本地存储(如localStorage或cookie)和token验证机制实现。用户首次登录成功后,服务器返回的认证token会被保存在客户端,下次打开应用时…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

h5响应式布局如何实现

h5响应式布局如何实现

使用媒体查询(Media Queries) 通过CSS媒体查询针对不同屏幕尺寸设置不同的样式规则。例如: @media screen and (max-width: 768px) { .co…

js 实现vue

js 实现vue

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

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统…