当前位置:首页 > JavaScript

js实现同时发多个请求

2026-04-04 23:53:36JavaScript

使用Promise.all实现并发请求

Promise.all方法可以接收一个Promise数组,等待所有请求完成后再统一处理结果。该方法适合在多个请求之间没有依赖关系且需要同时获取所有结果的场景。

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 => {
    // 所有请求都已完成
    return Promise.all(responses.map(res => res.json()));
  })
  .then(data => {
    console.log(data[0]); // 第一个请求的结果
    console.log(data[1]); // 第二个请求的结果
    console.log(data[2]); // 第三个请求的结果
  })
  .catch(error => {
    console.error('有一个请求失败:', error);
  });

使用async/await语法简化代码

async/await语法可以让并发请求的代码更加清晰易读,同时保持Promise.all的并发特性。

js实现同时发多个请求

async function fetchMultipleUrls() {
  try {
    const urls = [
      'https://api.example.com/data1',
      'https://api.example.com/data2',
      'https://api.example.com/data3'
    ];

    const requests = urls.map(url => fetch(url));
    const responses = await Promise.all(requests);
    const data = await Promise.all(responses.map(res => res.json()));

    data.forEach(result => console.log(result));
  } catch (error) {
    console.error('请求出错:', error);
  }
}

fetchMultipleUrls();

限制并发数量的实现

当需要控制同时发起的请求数量时,可以使用自定义的并发控制函数。这种方法适合在请求资源有限或需要防止服务器过载的场景。

js实现同时发多个请求

async function limitedConcurrentRequests(urls, maxConcurrent) {
  const results = [];
  const executing = new Set();

  for (const url of urls) {
    const request = fetch(url).then(res => res.json());

    results.push(request);
    executing.add(request);
    request.then(() => executing.delete(request));

    if (executing.size >= maxConcurrent) {
      await Promise.race(executing);
    }
  }

  return Promise.all(results);
}

// 使用示例
const urls = Array(10).fill().map((_, i) => `https://api.example.com/data${i+1}`);
limitedConcurrentRequests(urls, 3)
  .then(data => console.log(data))
  .catch(err => console.error(err));

使用Axios库实现并发请求

Axios提供了更简洁的API来处理HTTP请求,其并发请求的实现方式与fetch类似但更简洁。

const axios = require('axios');

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

Promise.all(requests)
  .then(responses => {
    responses.forEach(response => {
      console.log(response.data);
    });
  })
  .catch(error => {
    console.error('请求出错:', error);
  });

处理部分请求失败的情况

Promise.allSettled方法可以在部分请求失败时仍然获取其他请求的结果,而不是立即抛出错误。

const requests = [
  fetch('https://api.example.com/good1'),
  fetch('https://api.example.com/bad-request'),
  fetch('https://api.example.com/good2')
];

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

标签: 多个js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

vue实现多个图表展示

vue实现多个图表展示

使用 Vue 实现多个图表展示 安装图表库 推荐使用 ECharts 或 Chart.js,两者均支持 Vue 集成。以 ECharts 为例,安装依赖: npm install echarts…

vue实现多行多个表单

vue实现多行多个表单

Vue 实现多行多个表单 在 Vue 中实现多行多个表单,通常需要动态生成表单字段,并确保数据绑定和提交逻辑正确。以下是实现方法: 动态表单数据绑定 使用 v-for 动态渲染多行表单,并通过 v-…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js验证码实现

js验证码实现

验证码的基本原理 验证码(CAPTCHA)用于区分人类用户和自动化程序。常见类型包括图形验证码、滑动验证码、短信验证码等。JavaScript 可用于前端验证码的生成和验证逻辑。 图形验证码实现 使…