当前位置:首页 > JavaScript

js如何实现并发请求

2026-04-04 17:23:19JavaScript

使用 Promise.all 实现并发请求

Promise.all 可以接收一个 Promise 数组,等待所有 Promise 完成并返回结果数组。适用于需要同时发起多个请求并等待全部完成的场景。

const urls = ['url1', 'url2', 'url3'];
const requests = urls.map(url => fetch(url));

Promise.all(requests)
  .then(responses => Promise.all(responses.map(res => res.json())))
  .then(data => console.log(data))
  .catch(error => console.error('请求失败:', error));

使用 Promise.allSettled 处理部分失败

Promise.allSettled 会等待所有 Promise 完成,无论成功或失败,返回每个 Promise 的状态和结果/原因。

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 语法可以让并发请求代码更清晰易读。

async function fetchConcurrently(urls) {
  try {
    const responses = await Promise.all(urls.map(url => fetch(url)));
    const data = await Promise.all(responses.map(res => res.json()));
    return data;
  } catch (error) {
    console.error('请求出错:', error);
    throw error;
  }
}

控制并发数量的实现

当需要限制同时发起的请求数量时,可以使用以下方法:

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

  for (const url of urls) {
    const promise = fetch(url).then(res => res.json());
    results.push(promise);
    executing.add(promise);

    promise.finally(() => executing.delete(promise));

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

  return Promise.all(results);
}

使用 Axios 库实现并发

Axios 提供了方便的并发请求方法:

js如何实现并发请求

const axios = require('axios');

axios.all([
  axios.get('url1'),
  axios.get('url2')
])
.then(axios.spread((res1, res2) => {
  console.log(res1.data, res2.data);
}))
.catch(error => console.error(error));

注意事项

  • 浏览器对同一域名下的并发请求数有限制(通常6个)
  • 大量并发请求可能对服务器造成压力
  • 错误处理要完善,避免单个失败影响整体
  • 考虑添加超时机制防止长时间等待

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

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js实现vr

js实现vr

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

vue如何实现登录

vue如何实现登录

Vue 实现登录功能的方法 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,通常命名为 Login.vue。表单包含用户名和密码输入框,以及提交按钮。 <template>…

vue如何实现增删

vue如何实现增删

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

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…