gpt4 book ai didi

javascript - NodeJS : Chain functions automatically in a promise?

转载 作者:行者123 更新时间:2023-12-02 18:18:56 25 4
gpt4 key购买 nike

我当前正在从 API 获取数据,并且需要执行多个 GET 请求(使用 axios)。所有这些 GET 请求完成后,我返回一个已解决的 promise 。

但是,我需要根据数组列表自动执行这些 GET 请求:

    function do_api_get_requests() {

return promise = new Promise(function(resolve, reject) {

API_IDs = [0, 1, 2];

axios.get('https://my.api.com/' + API_IDs[0])
.then(data => {
// Do something with data

axios.get('https://my.api.com/' + API_IDs[1])
.then(data => {
// Do something with data

axios.get('https://my.api.com/' + API_IDs[2])
.then(data => {
// Do something with data

// Finished, resolve
resolve("success");

}


}


}

}

}

这可行,但问题是 API_IDs 并不总是相同的数组,它会改变。所以我不确定如何自动链接这些请求。

最佳答案

既然您说它可能是一个可变长度数组并且您显示了请求的顺序,您可以使用 async/await 循环遍历数组:

async function do_api_get_requests(API_IDS) {
for (let id of API_IDS) {
const data = await axios.get(`https://my.api.com/${id}`);
// do something with data here
}
return "success";
}

而且,既然您说过 API ID 列表是可变的,我就将其设置为您可以传递到函数中的参数。


如果您想并行运行所有 API 请求(这对于小型数组可能没问题,但对于大型数组可能会很麻烦)并且不需要按特定顺序运行它们,您可以这样做这个:

function do_api_get_requests(API_IDS) {
return Promise.all(API_IDS.map(async (id) => {
const data = await axios.get(`https://my.api.com/${id}`);
// do something with data here for this request
})).then(() => {
// make resolved value be "success"
return "success";
});
}

根据您的情况,您还可以使用Promise.allSettled()。由于您没有显示返回结果,因此尚不清楚这是否有用。

关于javascript - NodeJS : Chain functions automatically in a promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71135103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com