Som du har bemærket, vil brug af følgende ikke returnere dokumentet:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Som sådan kan du ikke gemme dokumentet i ActionCtrl
ved at bruge denne tilgang.
Du kan opnå det samme resultat ved at bruge din oprindelige tilgang, eller bruge en form for iteration. Et kontrolflowbibliotek som async kan være praktisk til at håndtere asynkrone opkald. Det reducerer ikke din kode, men reducerer forespørgslerne. Se eksempel:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Dette svar antager, at ActionCtrl.saveRemove()
implementering kan tage et individuelt dokument som en parameter og kan udføre tilbagekaldet fra async.each
sløjfe. async.each
kræver, at et tilbagekald køres uden argumenter i slutningen af hver iteration, så du ville ideelt set køre dette i slutningen af .saveRemove()
Bemærk, at remove
metode på et individuelt dokument vil faktisk returnere det dokument, der er blevet fjernet.