Я использую 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.log(requestConfig)
return axios(requestConfig)
.then ( res => {
// [TEST B] - incorrect page # param, always last page
console.log(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)
})
}
}
}
Нечетная часть - at [TEST A]
, выводится правильный номер страницы параметров.Для [TEST B]
выводится номер последней страницы для всех запросов.
Я нашел их, но они не являются той же проблемой, или я не следую ...
Почему я получаю последнее обещание?
Можно ли использовать axios.all с then () для каждого обещания?
Есть идеи?