javascript - 多次执行axios请求只得到一个输出
问题描述
我有以下代码:
for (var i = 0; i < subscriptions.length; i++) {
axios.get(`SOME_URL/${subscriptions[i]}`, config1)
.then((result) => {
return result.data.subscriptionId
})
.then((result) => {
axios.get(`SOME_URL/${result}/devices`, config2)
.then((data) => {
activationCodeAndDevice[data.data.devices[0].id] = result
return activationCodeAndDevice
})
.then((result) => {
console.log(result);
})
.catch((err) => {
console.log(err);
})
})
.catch((err) => {
console.log(err);
})
}
现在,console.log(result) 将打印与 for 循环一样多的次数。当所有的 Axios 请求都执行完毕后,你有什么建议只打印一次结果?
现在我确实构建了这样的东西,但有 3 个不同的请求:
var request1 = axios.get('request1')
var request2 = axios.get('request2')
var request3 = axios.get('request3')
Promise.allSettled([request1, request2, request3])
.then((values) => {
//do something
})
.catch((err) => {
//do something
})
我不知道如何获取我必须多次执行的请求,具体取决于一组值,但只能获得一次输出。当然,我可以将它写在一个文件中,并在写入数据后查看该文件,但我希望它在控制台上有它。
谢谢
解决方案
我设法像这样解决它:
const getSubscriptionResponse = subscriptions.map(subscription => axios.get(`SOME_URL/${subscription}`, config1))
Promise.allSettled(getSubscriptionResponse).then((values) => {
var subscriptionsValue = []
for (let i = 0; i < values.length; i++) {
subscriptionsValue.push(values[i].value.data.subscriptionId);
}
const getDeviceResponse = subscriptionsValue.map(sub => axios.get(`SOME_URL/${sub}/devices`, config2))
Promise.allSettled(getDeviceResponse).then((res) => {
var finalResults = {}
for (let j = 0; j < res.length; j++) {
finalResults[res[j].value.data.devices[0].id] = subscriptionsValue[j]
}
console.log(finalResults);
})
})
这只会打印一次 finalResult
{
A:A,
B:B,
C:C,
.
.
.
}
所有的 for 循环看起来有点乱,但我实际上需要从响应数组中获取数据。