当前位置:首页 > JavaScript

js如何实现并发请求

2026-01-31 01:29:05JavaScript

实现并发请求的方法

在JavaScript中,可以通过多种方式实现并发请求,主要利用异步编程的特性。以下是几种常见的方法:

使用Promise.all

Promise.all 可以并行执行多个异步操作,并在所有操作完成后返回结果数组。适用于需要等待所有请求完成后再处理的场景。

const fetchData1 = fetch('https://api.example.com/data1');
const fetchData2 = fetch('https://api.example.com/data2');

Promise.all([fetchData1, fetchData2])
  .then(responses => Promise.all(responses.map(res => res.json())))
  .then(data => {
    console.log(data[0]); // 第一个请求的结果
    console.log(data[1]); // 第二个请求的结果
  })
  .catch(error => console.error('Error:', error));

使用Promise.allSettled

Promise.allSettled 类似于 Promise.all,但不会因为某个请求失败而中断,而是会返回所有请求的状态(成功或失败)。

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

Promise.allSettled(promises)
  .then(results => {
    results.forEach(result => {
      if (result.status === 'fulfilled') {
        console.log(result.value);
      } else {
        console.error(result.reason);
      }
    });
  });

使用async/await

结合 async/await 可以更清晰地处理并发请求,代码更易读。

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:', error);
  }
}

fetchConcurrently();

使用第三方库(如Axios)

Axios 提供了更简洁的API来处理并发请求。

const axios = require('axios');

axios.all([
  axios.get('https://api.example.com/data1'),
  axios.get('https://api.example.com/data2')
])
  .then(axios.spread((response1, response2) => {
    console.log(response1.data, response2.data);
  }))
  .catch(error => console.error('Error:', error));

使用Web Workers

对于CPU密集型任务,可以通过Web Workers实现真正的并行处理。Web Workers运行在独立的线程中,不会阻塞主线程。

js如何实现并发请求

// main.js
const worker1 = new Worker('worker1.js');
const worker2 = new Worker('worker2.js');

worker1.onmessage = event => console.log('Worker1:', event.data);
worker2.onmessage = event => console.log('Worker2:', event.data);

worker1.postMessage('start');
worker2.postMessage('start');

// worker1.js
self.onmessage = function(event) {
  fetch('https://api.example.com/data1')
    .then(response => response.json())
    .then(data => self.postMessage(data));
};

注意事项

  • 浏览器对并发请求数量有限制(通常为6个),超过限制的请求会被排队。
  • 避免滥用并发请求,过多的请求可能导致服务器压力过大。
  • 使用 Promise.all 时,如果其中一个请求失败,整个Promise会立即拒绝。

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

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

h5响应式布局如何实现

h5响应式布局如何实现

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

js 实现vue

js 实现vue

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