我有一个MongoDB查询,其中有一个foreach循环,该循环调用另一个mongodb查询几次,并将每个查询的查询结果推入数组。现在这是一个异步调用,这意味着下一行取决于此数组
res.status(200).send(services);
将被执行并在填充之前发送一个空数组。
代码段:
static async getServices(req, res) {
let event_id = req.params.id;
try {
let services = [];
await EventRepo.getEvent(event_id, (event) => {
event.services.forEach(service_id => {
ServiceRepo.getService(service_id, (service) => {
services.push(service);
});
});
await res.status(200).send(services);
});
} catch (exception) {
res.status(500).send(exception)
}
}
我希望在发送数组之前将其填充,并且无法在此查询中嵌套发送的响应:
event.services.forEach(service_id => {
ServiceRepo.getService(service_id, (service) => {
services.push(service);
// Here for example
});
});
答案 0 :(得分:0)
事实证明,for each循环是问题所在,因为它在另一个函数(即for each循环)内的每次迭代中实例化了一个promise。只需使用普通的for循环即可。