[英]Node.js and Express: wait for asynchronous operation before responding to HTTP request
[英]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.