簡體   English   中英

如何在(Node Express JS)中將數據響應回客戶端之前等待多個獲取響應被推送到數組中

[英]How to wait for multiple fetch responses to be pushed in array before responding data back to client in (Node Express JS)

我在查詢中收到一些用逗號分隔的動物的名稱。 現在我必須調用一個一次只接受一個動物名稱的 API。 我想為每只動物調用一次相同的 API,並在響應我的客戶之前將 jsonified 數據推送到數組中。

我在測試時在我的客戶端上得到一個空數組,據我所知,這是因為 res.send() 在承諾等待解決時執行。

非常感謝任何解決方案。

router.get('/animals', async (req, res) => {
  const mammalsArray = req.query.mammals.split(',');
  let final = [];
  await mammalsArray.forEach(async function(mammal) {
        const response = await fetch(`https://someapi.com/pedia?tag=${mammal}`);
        const json = await response.json();
        final.push(json);
      });
  res.send(final);
});

async函數返回一個承諾。 你想保存所有的承諾,當所有的承諾都得到解決時,你想繼續。

您可以使用Promise.all等待所有承諾。

我使用map而不是forEach將所有數組值映射到 promise。

 router.get('/animals', async(req, res) => { const mammalsArray = req.query.mammals.split(','); let final = []; let promisesArray = mammalsArray.map(async function(mammal) { const response = await fetch(`https://someapi.com/pedia?tag=${mammal}`); const json = await response.json(); final.push(json); }); await Promise.all(promisesArray); res.send(final); });

暫無
暫無

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

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