Рад, что вы нашли ответ. Вот несколько идей по структуре и стилю, которые облегчат чтение этого кода (вами или вашим коллегой в будущем) и облегчат его отладку и расширение. Начните с создания небольших функций с обещанием возврата для двух асинхронных операций c.
function deleteAboutWithId(id) {
return new Promise((resolve, reject) => {
AboutModel.findByIdAndDelete({"_id": id}).exec(function (err, result) {
err ? reject(err) : resolve(result)
})
})
}
function deleteImageWithAboutId(id) {
return new Promise((resolve, reject) => {
AboutImageModel.findOneAndDelete({ aboutId: id }).exec(function (err, result) {
err ? reject(err) : resolve(result)
})
})
}
Хорошим преимуществом является то, что они могут быть проверены модулем, повторно использованы, обобщены и т. Д. c. Другое преимущество заключается в том, что их использование делает вашу бизнес-логику c понятной и лаконичной. Код читается так, как вы бы описали функцию коллеге ...
- Удалить элемент
- Удалить изображение
- Если оба успешно, ответьте на составное сообщение об успехе
- Если одно из них не удалось, ответьте (возможно) на составное сообщение об ошибке
Функция publi c:
const msgIdError = 'About item id is not valid.'
const msgItemSuccess = 'About item has been removed successful.'
const msgImageSuccess = ' Its image item has also been removed successful.'
const msgItemError = 'Error at deleting an about item.'
const msgImageError = ' Error trying to remove about image item.'
module.exports.delete = function (req, res) {
const idAbout = req.params.idAbout
if (!mongoose.Types.ObjectId.isValid(idAbout)) {
responseUtilities.sendJsonResponse(res, false, { "message": msgIdError })
}
let message = ''
deleteAboutWithId(idAbout).then(() => {
message += msgItemSuccess
return deleteImageWithAboutId(idAbout)
}).then(() => {
message += msgImageSuccess
responseUtilities.sendJsonResponse(res, err, { "message": message })
}).catch(err => {
// if message is empty, the first block threw the error
message += message.length ? msgImageError : msgItemError
responseUtilities.sendJsonResponse(res, err, { "message": message });
})
}
Несколько быстрых заметок : (1) приятно убрать струны с дороги. Они могут когда-нибудь быть сохранены в конфигурации, переведены на другие языки и т. Д. c. (2) Он немного очищает код, чтобы проверить наличие недопустимых входов в верхней части и вывести из строя в верхней части , если входные данные недействительны.