Du vil måske prøve async modul til dette. Det har nogle meget nyttige metoder til at behandle hvert emne i en samling, og tilbyder funktionalitet, når al behandling er afsluttet.
Jeg henviser dig især til køen funktion, som lader dig tilføje opgaver til en kø, og derefter gøre noget, når alle elementer er blevet behandlet.
For eksempel kan du gøre noget som:
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);
}
Hvis vi så antager, at du har din liste over dokumenter i en variabel ved navn docs , alt hvad du skal gøre for at behandle dem alle er at skubbe dem ind i køen.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Protip:du skal skubbe et objekt indeholder dokumentet i køen. Der er en mærkelig fejl, hvis du prøver at passere en uindpakket genstand.
Nu, hvis du ville have de specifikke statusser for hvert dokument, du behandler i Mongo, er dette fuldstændig muligt på denne måde. Så længe du instansierede en datastruktur uden for køen, kan du tilføje statuskoder (osv.) til den, efterhånden som hvert element behandles, og sende strukturen til klienten i køens afløb fungere. Det burde ikke være for meget besvær.