Možná budete chtít vyzkoušet async modul pro toto. Má několik velmi užitečných metod pro zpracování každé položky ve sbírce a nabízí funkcionalitu po dokončení veškerého zpracování.
Odkazuji vás zejména na frontu funkce, která vám umožní přidat úkoly do fronty a poté, co byly všechny položky zpracovány, něco udělejte.
Můžete například udělat něco jako:
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);
}
Pak, pokud předpokládáme, že máte seznam dokumentů v proměnné s názvem docs , vše, co musíte udělat pro jejich zpracování, je zařadit je do fronty.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Protip:musíte vložit objekt obsahující dokument do fronty. Pokud se pokusíte vložit nezabalený objekt, dojde k podivné chybě.
Nyní, pokud byste chtěli konkrétní stavy pro každý dokument, který zpracováváte v Mongo, je to takto zcela možné. Pokud jste vytvořili instanci datové struktury mimo frontu, můžete do ní přidávat stavové kódy (atd.) při zpracování každé položky a odeslat strukturu klientovi do odvodu fronty. funkce. Nemělo by to být příliš obtížné.