Możesz wypróbować async moduł do tego. Zawiera kilka bardzo przydatnych metod przetwarzania każdego elementu w kolekcji i oferuje funkcje na wypadek zakończenia całego przetwarzania.
W szczególności odsyłam Cię do kolejki funkcja, która pozwala dodać zadania do kolejki, a następnie po przetworzeniu wszystkich elementów zrób coś.
Na przykład możesz zrobić coś takiego:
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);
}
Następnie, jeśli założymy, że masz listę dokumentów w zmiennej o nazwie dokumenty , wszystko, co musisz zrobić, aby je wszystkie przetworzyć, to umieścić je w kolejce.
for (var doc in docs) {
q.push({ doc: docs[doc] }, function(err) {
if (err) console.log(err);
})
}
Wskazówka:musisz wypchnąć obiekt zawierający dokument do kolejki. Wystąpił dziwny błąd, jeśli spróbujesz przekazać nieopakowany obiekt.
Teraz, jeśli chcesz mieć określone statusy dla każdego dokumentu, który przetwarzasz w Mongo, jest to całkowicie możliwe. Dopóki utworzyłeś instancję struktury danych poza kolejką, możesz dodać do niej kody statusCodes (itp.) podczas przetwarzania każdego elementu i wysłać strukturę do klienta w drenie kolejki. funkcjonować. Nie powinno to być zbyt trudne.