Das liegt daran, dass save
ist eigentlich eine E/A-Operation, die Async ist. Jetzt der for
Schleife ist eigentlich sync. Stellen Sie sich das so vor:Ihre JS-Engine führt jede Zeile, die sie sieht, seriell aus. Angenommen, diese Zeilen werden nacheinander auf einem Stapel gehalten. Wenn es um das save
geht , es behält es auf einem anderen Stapel beiseite (da es sich um eine E / A-Operation handelt und daher einige Zeit dauern würde) und fährt mit dem Rest der Schleife fort. Es stellt sich also heraus, dass die Engine diesen neuen Stack erst überprüfen würde, nachdem sie alle Zeilen auf dem älteren abgeschlossen hat. Daher ist der Wert der Variable cats
wird das letzte Element im Array sein. Somit wird nur der letzte Wert gespeichert.
Um diese Tragödie zu bekämpfen, können Sie mehrere Methoden anwenden:
- Schließungen – Weitere Informationen
- Sie können so schließen:
cats.forEach()
- Sie können so schließen:
- Versprechungen – Weitere Informationen . Es gibt eine süße Bibliothek was dem Mongo-Treiber verspricht, die Arbeit zu erleichtern.
- Generatoren usw. – Lesen Sie mehr . Noch nicht bereit für die Primetime.
Anmerkung zu Nr. 2 - Ich bin kein Mitwirkender des Projekts, arbeite aber mit dem Autor zusammen. Ich benutze die Bibliothek jetzt seit über einem Jahr und sie ist schnell und großartig!