Как обрабатывать asyn c при выполнении запроса mon goose в каждом элементе массива в express? - PullRequest
0 голосов
/ 26 мая 2020

При использовании следующего метода публикации у меня возникли проблемы из-за moongose ​​asyn c. Сначала выполняется res.send(suggestions), затем Expense.findOne.exec

app.post('/suggestions', async function(req, res) {
    const suggestions = await req.body.map((description) => {
        Expense.findOne({ description: new RegExp(description, 'i') }).exec((err, result) => {
            if (result) {
                console.log(result.newDescription);
                return {
                    description,
                    newDescription: result.newDescription,
                    category: result.category,
                    subcategory: result.subcategory
                };
            }
        });
    });

    res.send(suggestions);
});

Результатом является массив нулевых значений. Как я могу выполнить запрос для каждого элемента, а затем выполнить res.send(suggestion)?

1 Ответ

0 голосов
/ 26 мая 2020

Найдено решение со следующим кодом:

app.post('/suggestions', async function(req, res) {
    try {
        if (req.body.length > 0) {
            const suggestions = req.body.map((description) =>
                Expense.findOne({ description: new RegExp(description, 'i') })
            );

            const results = await Promise.all(suggestions);
            return res.send(results);
        }
    } catch (e) {
        console.log('error', e);
    }
});

...