вложенные запросы mongodb в цикле - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть запрос 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 голосов
/ 21 сентября 2019

Оказалось, что проблема для каждого цикла - это проблема, потому что она создает обещание на каждой итерации в другой функции, то есть для каждого цикла.Просто используйте нормальный для цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...