Dat komt omdat de save
is eigenlijk een I/O-bewerking die Async is. Nu, de for
loop is eigenlijk sync. Zie het op deze manier:je JS-engine voert serieel elke regel uit die hij ziet. Neem aan dat deze lijnen een voor een op een stapel worden bewaard. Als het gaat om het save
, het houdt het apart op een andere stapel (omdat het een I/O-bewerking is en dus tijd zou vergen) en gaat verder met de rest van de lus. Het blijkt dus dat de engine deze nieuwe stapel pas zou controleren nadat elke regel op de oudere is voltooid. Daarom is de waarde van de variabele cats
zal het laatste item in de array zijn. Zo wordt alleen de laatste waarde opgeslagen.
Om deze tragedie te bestrijden, kun je meerdere methoden gebruiken:
- Sluitingen - Meer lezen
- Je kunt als volgt afsluiten:
cats.forEach()
- Je kunt als volgt afsluiten:
- Beloften - Meer lezen . Er is een sweet-bibliotheek wat de mongo-chauffeur belooft om het gemakkelijker te maken om mee te werken.
- Generators, enz. - Meer lezen . Nog niet klaar voor primetime.
Opmerking over #2 - Ik lever geen bijdrage aan het project, maar werk wel samen met de auteur. Ik gebruik de bibliotheek nu al meer dan een jaar en het is snel en geweldig!