Axios.all() с использованием конфигурации последнего запроса

Я использую axios.all() для разрешения неопределенного количества различных запросов. Допустим, для этого примера количество звонков равно 3.

Для всех этих запросов мне нужно изменить значение в axios params, чтобы получить другую страницу из API для каждого запроса:

params: { page: 1 } // request 1
params: { page: 2 } // request 2
params: { page: 3 } // request 3

Проблема в том, что axios запрашивает page: 3 3 раза, как будто он держит последний requestConfig, предоставленный для промисов.

Вот мой код:

function request(requestConfig) {
  // ... axios config such as baseURL, api authentication, etc.

  // [TEST A] - correct page # param
  console.info(requestConfig)

  return axios(requestConfig)
    .then ( res => {
      // [TEST B] - incorrect page # param, always last page
      console.info(requestConfig)
      return res.data
    })
    .catch( error => {
      // error
    })
}


export default {
  // ... other axios request functions
  getProjects () {
    return new Promise( (resolve, reject) => {
      let projects = []
      let promises = []

      // loop through all project pages (3 for this example)
      for (let i = 1; i <= 3; i++) {
        promises.push(request({ url: 'projects', params: {
          page: i // set the page number for this request
        }))
      }

      axios.all(promises)
        .then( results => {
          // loop through the results and push them to projects[]
          results.forEach( page => {
            projects.push.apply(projects, page)
          })

          resolve(projects)
        })
        .catch( error => {
          reject(error)
        })
    }
  }
}

Нечетная часть находится в [TEST A], выводится правильный номер страницы параметров. Для [TEST B] он выводит номер последней страницы для всех запросов.

Я нашел это, но либо это не одна и та же проблема, либо я не следую...

Почему я получаю последнее обещание?

Можно ли использовать axios.all с then() для каждого промиса?

Есть идеи?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
443
1

Ответы 1

Я заставил его работать, изменив первую функцию на:

function request(requestConfig) {
  // ... axios config such as baseURL, api authentication, etc.

  // [TEST A] - correct page # param
  console.info(requestConfig)

  // ADDED THIS TO CREATE A NEW AXIOS INSTANCE EVERY TIME
  let axiosInstance = axios.create(requestConfig)

  return axiosInstance(requestConfig)
    .then ( res => {
      // [TEST B] - incorrect page # param, always last page
      console.info(requestConfig)
      return res.data
    })
    .catch( error => {
      // error
    })
}

Не уверен, что это самый эффективный способ добиться этого, но он достигает конечной цели...

Другие вопросы по теме