#node.js #mongodb #express
Вопрос:
У меня есть этот маршрут, чтобы удалить «гараж» из базы данных 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");
}
})
Ответ №1:
Вам нужно будет дождаться всех обещаний, возвращаемых функцией карты.
Обещать.все ждут множества обещаний и выполняют их параллельно.
поскольку вы передаете асинхронную функцию функции 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");
}
})