嵌套mongodb查询循环

时间:2019-09-20 21:00:09

标签: javascript node.js mongodb rest asynchronous

我有一个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
    });
});

1 个答案:

答案 0 :(得分:0)

事实证明,for each循环是问题所在,因为它在另一个函数(即for each循环)内的每次迭代中实例化了一个promise。只需使用普通的for循环即可。