Ответ 1
Как вы уже отметили, использование следующего документа не вернет документ:
Data.find(query).remove().exec(function(err, data) {
// data will equal the number of docs removed, not the document itself
}
Таким образом, вы не можете сохранить документ в ActionCtrl
, используя этот подход.
Вы можете достичь того же результата, используя оригинальный подход, или использовать некоторую форму итерации. Для обработки асинхронных вызовов может понадобиться библиотека потока управления, например async. Он не уменьшит ваш код, но уменьшит количество запросов. Пример:
Data.find(query, function(err, data) {
async.each(data, function(dataItem, callback) {
dataItem.remove(function(err, result) {
ActionCtrl.saveRemove(result, callback);
});
});
});
Этот ответ предполагает, что реализация ActionCtrl.saveRemove()
может принимать отдельный документ в качестве параметра и может выполнять обратный вызов из цикла async.each
. async.each требует, чтобы обратный вызов запускался без аргументов в конце каждой итерации, поэтому вы идеально выполнили бы это в конце .saveRemove()
Обратите внимание, что метод remove
в отдельном документе фактически вернет документ, который был удален.