Vielleicht möchten Sie den async ausprobieren Modul dazu. Es verfügt über einige sehr hilfreiche Methoden zum Verarbeiten jedes Elements in einer Sammlung und bietet Funktionen für den Fall, dass die gesamte Verarbeitung abgeschlossen ist.
Ich verweise insbesondere auf die Warteschlange Funktion, mit der Sie Aufgaben zu einer Warteschlange hinzufügen und dann, sobald alle Elemente verarbeitet wurden, etwas tun können.
Zum Beispiel könnten Sie so etwas tun:
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);
}
Dann, wenn wir davon ausgehen, dass Sie Ihre Dokumentenliste in einer Variablen namens docs haben , alles, was Sie tun müssen, um sie alle zu verarbeiten, ist, sie in die Warteschlange zu verschieben.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Protip:Sie müssen ein Objekt enthaltend pushen das Dokument in die Warteschlange. Es gibt einen seltsamen Fehler, wenn Sie versuchen, ein unverpacktes Objekt zu übergeben.
Wenn Sie nun die spezifischen Status für jedes Dokument, das Sie in Mongo verarbeiten, möchten, ist dies auf diese Weise absolut möglich. Solange Sie eine Datenstruktur außerhalb der Warteschlange instanziiert haben, könnten Sie ihr statusCodes (usw.) hinzufügen, während jedes Element verarbeitet wird, und die Struktur an den Client im Drain der Warteschlange senden Funktion. Sollte nicht zu viel Aufwand sein.