axios如何一次发送多个并发请求?

在前端开发中,Axios 提供了几种方法来发送多个并发请求:

  1. Promise.all: 这是最常用的方法,它接受一个 Promise 数组作为参数,并返回一个新的 Promise。当所有传入的 Promise 都 resolve 时,新的 Promise 才会 resolve,并将所有结果以数组形式返回。如果任何一个 Promise reject,新的 Promise 也会 reject。
import axios from 'axios';

const requests = [
  axios.get('/api/users'),
  axios.get('/api/products'),
  axios.get('/api/orders')
];

Promise.all(requests)
  .then(responses => {
    const users = responses[0].data;
    const products = responses[1].data;
    const orders = responses[2].data;
    // 处理数据...
  })
  .catch(error => {
    console.error('Error:', error);
  });
  1. axios.all: 这是 Axios 提供的更便捷的方法,其底层也是基于 Promise.all。它接受一个 Axios 请求数组作为参数,用法与 Promise.all 类似。
import axios from 'axios';

axios.all([
  axios.get('/api/users'),
  axios.get('/api/products'),
  axios.get('/api/orders')
])
  .then(axios.spread((usersRes, productsRes, ordersRes) => {
    const users = usersRes.data;
    const products = productsRes.data;
    const orders = ordersRes.data;
    // 处理数据...
  }))
  .catch(error => {
    console.error('Error:', error);
  });

axios.spread 可以将 axios.all 返回的结果数组展开成独立的参数,方便直接使用。

  1. for...of 循环 + async/await: 这种方法可以按顺序发送请求,但每个请求仍然是异步的。如果需要在上一个请求完成后才发送下一个请求,则应该使用这种方法。
import axios from 'axios';

async function fetchData() {
  const urls = ['/api/users', '/api/products', '/api/orders'];
  const results = [];

  for (const url of urls) {
    try {
      const response = await axios.get(url);
      results.push(response.data);
    } catch (error) {
      console.error('Error:', error);
      // 可以选择在这里继续执行或中断循环
    }
  }

  // 处理 results 数组...
  console.log(results);
}

fetchData();

选择哪种方法取决于你的具体需求:

  • 如果你需要所有请求都成功才处理数据,并且希望并发执行,那么 Promise.allaxios.all 是最佳选择。
  • 如果你需要按顺序发送请求,或者需要根据前一个请求的结果决定是否发送下一个请求,那么 for...of 循环 + async/await 更合适。

希望这些信息能帮到你!

posted @   王铁柱6  阅读(122)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示