node.js - 快递路线仍然返回从 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");
}
})
解决方案
您将需要等待 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");
}
})
推荐阅读
- git - 有没有办法标记 git 提交以防止推送(即使跨合并/樱桃挑选)?
- c# - 在存储库中使用 ThenInclude() 方法
- discord.py - 每次有人使用命令时如何在数字上加 + 1
- python - 如何从python中没有空格的字符串中提取数据
- python-3.x - Spacy lemmatization:单词“number”的错误结果
- python - 如何通过venv指定用于创建虚拟环境的python版本?
- python - 用 Python 绘制从 excel 导入的相关表
- delphi - 使用 RTTI 从已知类型在 Delphi 中设置 TValue 记录
- augmented-reality - ARKit - 测量单位的官方来源?
- gtk - gtk height_for_width 由于最小宽度较小,导致给定宽度的窗口高度不合理