Axios Concurrent HTTP Requests Syntax

Executing concurrent HTTP requests in Axios allows developers to fetch data from multiple endpoints simultaneously, reducing overall latency and improving application performance. This guide demonstrates the primary syntax options for handling parallel requests in Axios using modern standard JavaScript Promise.all(), the legacy axios.all() method, and resilient handling using Promise.allSettled().

1. Modern Syntax: Using Promise.all()

The standard and modern approach to executing concurrent requests with Axios is using the native ES6 Promise.all() method alongside async/await.

import axios from 'axios';

async function fetchConcurrentData() {
  try {
    const [usersResponse, postsResponse] = await Promise.all([
      axios.get('https://api.example.com/users'),
      axios.get('https://api.example.com/posts')
    ]);

    console.log('Users:', usersResponse.data);
    console.log('Posts:', postsResponse.data);
  } catch (error) {
    console.error('Error fetching data:', error);
  }
}

fetchConcurrentData();

If any single request fails, Promise.all() immediately rejects, and control moves to the catch block.


2. Legacy Syntax: Using axios.all() and axios.spread()

Earlier versions of Axios provided dedicated helper functions: axios.all() and axios.spread(). While Promise.all() is now preferred, this syntax remains common in older codebases.

import axios from 'axios';

function fetchLegacyData() {
  const requestUsers = axios.get('https://api.example.com/users');
  const requestPosts = axios.get('https://api.example.com/posts');

  axios.all([requestUsers, requestPosts])
    .then(
      axios.spread((usersResponse, postsResponse) => {
        console.log('Users:', usersResponse.data);
        console.log('Posts:', postsResponse.data);
      })
    )
    .catch((error) => {
      console.error('Error fetching data:', error);
    });
}

fetchLegacyData();

3. Resilient Requests: Using Promise.allSettled()

When you need all requests to execute regardless of whether some succeed or fail, use Promise.allSettled().

import axios from 'axios';

async function fetchResilientData() {
  const results = await Promise.allSettled([
    axios.get('https://api.example.com/users'),
    axios.get('https://api.example.com/invalid-endpoint')
  ]);

  results.forEach((result, index) => {
    if (result.status === 'fulfilled') {
      console.log(`Request ${index} succeeded:`, result.value.data);
    } else {
      console.error(`Request ${index} failed:`, result.reason.message);
    }
  });
}

fetchResilientData();