首页 > 解决方案 > 在express中的每个数组元素中进行猫鼬查询时如何处理异步?

问题描述

在以下发布方法中,由于月光异步,我遇到了一些问题。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)

标签: node.jsexpressmongooseasync-await

解决方案


使用以下代码找到解决方案:

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


推荐阅读