首页 > 解决方案 > 多次执行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
})

我不知道如何获取我必须多次执行的请求,具体取决于一组值,但只能获得一次输出。当然,我可以将它写在一个文件中,并在写入数据后查看该文件,但我希望它在控制台上有它。

谢谢

标签: javascriptnode.jsaxios

解决方案


我设法像这样解决它:


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 循环看起来有点乱,但我实际上需要从响应数组中获取数据。


推荐阅读