Я использую следующую функцию, которая должна иметь входной сигнал обратного вызова: https://mongoosejs.com/docs/api.html#model_Model .findOneAndRemove
У меня есть следующий объект мутации, который должен удалить конкретное лекарство из базу данных, а затем удалите все экземпляры ее MedicineId из массивов всех записей дня, которые содержат идентификатор.
deleteMedicine: {
type: MedicineType,
args: {
id: { type: new GraphQLNonNull(GraphQLID) }
},
async resolve (parent, args) {
let res = Medicine.findOneAndRemove({ _id: args.id }, async (err, doc) => {
if (err === null && doc === null || doc === null) {
return;
} else if (err) {
console.error(err);
return;
} else {
return await Promise.all(doc.dayNames.map(dayName => {
return DayOfWeek.findByIdAndUpdate(dayName, { $pull: { medicineIds: doc._id }})
.catch((error1) => console.error(error1));
})).catch((error2) => console.error(error2));
}
});
await res;
return res;
}
}
findOneAndRemove успешно удаляет документ с args.id в коллекции Medicine, но когда он вызывает функцию обратного вызова, иногда он пропускает null для выполнения c, поэтому функция обратного вызова не всегда выполнить правильно.
Кроме того, я получаю необработанное предупреждение об ошибке, хотя я перехватываю все ошибки. \
Я добавил logi c для обработки, когда err и do c оба равны нулю согласно этому сообщению: https://github.com/Automattic/mongoose/issues/5022