首页 > 解决方案 > 快递路线仍然返回从 mongodb 中删除的项目

问题描述

我有这条路线从 mongodb 数据库中删除一个“车库”,然后抓取一些剩余的车库。出于某种原因,它仍在返回已删除的车库并将其返回,但如果我检查数据库,则删除成功。

router.post('/garage/delete', requireLogin, async (req, res) => {
    let limit = 20;
    try {
        let list = req.body;
        list.map( async (item) => {
            const existingGarage = await Garage.find({_id: item._id});
            if (existingGarage) {
                await Garage.deleteOne({_id: item._id});
            } else {
                res.status(400).send("Garage not found");
            }
        })
        const allGarages = await Garage.find().limit( limit );
        console.log(allGarages);
        res.send(allGarages);
    } catch {
        res.status(400).send("Garage not found");
    }
})

标签: node.jsmongodbexpress

解决方案


您将需要等待 map 函数返回的所有承诺。

Promise.all 等待一系列 Promise 并并行运行它们。
由于您将异步函数传递给 map 函数,因此您需要等待该异步函数返回的所有承诺
其他解决方案是使用 for of 循环

router.post('/garage/delete', requireLogin, async (req, res) => {
    let limit = 20;
    try {
        let list = req.body;
        await Promise.all(list.map( async (item) => {
            const existingGarage = await Garage.find({_id: item._id});
            if (existingGarage) {
                await Garage.deleteOne({_id: item._id});
            } else {
                res.status(400).send("Garage not found");
            }
        }))
        const allGarages = await Garage.find().limit( limit );
        console.log(allGarages);
        res.send(allGarages);
    } catch {
        res.status(400).send("Garage not found");
    }
})

推荐阅读