Я использую 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() для каждого промиса?
Есть идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я заставил его работать, изменив первую функцию на:
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
})
}
Не уверен, что это самый эффективный способ добиться этого, но он достигает конечной цели...