Може да опитате async модул за това. Има някои много полезни методи за обработка на всеки елемент в колекция и предлага функционалност, когато цялата обработка е приключила.
Насочвам ви по-специално към опашката функция, която ви позволява да добавяте задачи към опашка, след което след като всички елементи бъдат обработени, направете нещо.
Например, можете да направите нещо като:
var q = async.queue(function(task, callback) {
// task.doc would contain your individual doc to process
// your insert / update logic goes here...
// Callback signifies you're done with this task
callback();
}, 2) // <--- this number specifies the number of tasks to run in parallel
q.drain = function() {
// this is the queue's callback, called when the queue is empty,
// i.e. when all your documents have been processed.
res.send(statusCode, message);
}
Тогава, ако приемем, че имате вашия списък с документи в променлива с име docs , всичко, което трябва да направите, за да ги обработите всички, е да ги поставите на опашката.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Подсказка:трябва да натиснете обект, съдържащ документа на опашката. Има странна грешка, ако се опитате да прехвърлите неопакован обект.
Сега, ако искате конкретните състояния за всеки документ, който обработвате в Mongo, това е напълно възможно по следния начин. Докато сте създали екземпляр на структура от данни извън опашката, можете да добавите statusCodes (и т.н.) към нея, когато всеки елемент се обработва, и да изпратите структурата на клиента в източването на опашката функция. Не би трябвало да е много караница.