如何等待多个fetch响应被推入数组之前响应数据回客户端(Node Express JS)



我正在接收以逗号分隔的查询中的一些动物的名称。现在我必须调用一次只接受一个动物名称的API。我想为每个动物调用一次相同的API,并在响应客户端之前将json数据推送到数组中。

在测试时,我在客户端上得到一个空数组,据我的理解,这是因为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。你想保存所有的承诺,当所有的承诺都解决了,你想继续。

您可以等待Promise.all的所有承诺。

我使用map而不是forEach来映射所有数组值到承诺。

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);
});

相关内容

  • 没有找到相关文章

最新更新