当前位置:首页 > 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 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue如何实现id

vue如何实现id

在 Vue 中实现 ID 绑定 Vue 提供了多种方式为元素或组件绑定唯一的 ID,可以根据具体需求选择合适的方法。 方法一:使用 v-bind 绑定静态或动态 ID <template&g…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…