簡體   English   中英

如何在 for 循環中進行並發 api 調用?

[英]How to make concurrent api calls in a for loop?

我有以下代碼:

    Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[0]}`)),
    Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[1]}`)),
    Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[2]}`)),
  ]).then((all) => {
    res.json({"success": true, "test": all[0].data}, "test1":all[1].data, "test2":all[2].data);
  });

tagsArr 的長度未知。 因此,我想實現某種 for 循環,對每個標簽 Arr 進行 API 調用

for(let i = 0; i < tagsArr.length; i++) {
        Promise.resolve(axios.get(`apiwebsite.com/api?tag=${tagsArr[i]}`)),
}

現在這就是問題所在。 我還希望我的 API 調用是並發的。 如何在為每個標簽進行 API 調用的同時循環遍歷 tagsArr,同時進行並發 API 調用?

您可以創建一組已執行的承諾並等待所有承諾。

const promises = tagsArr
    .map(tag => axios.get(`apiwebsite.com/api?tag=${tag}`));

Promise.all(promises)
    .then(responses => {
        // Do your thing here...
    });

嘗試將它們放入數組並使用 Promise.all:

Promise.all([
    axios.get(`apiwebsite.com/api?tag=${tagsArr[0]}`),
    axios.get(`apiwebsite.com/api?tag=${tagsArr[1]}`),
    axios.get(`apiwebsite.com/api?tag=${tagsArr[2]}`),
  ]).then((all) => {
    res.json({"success": true, "test": all[0].data}, "test1":all[1].data, "test2":all[2].data);
  });

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM