Det er fordi save
er faktisk en I/O-operation, som er Asynkron. Nu, for
loop er faktisk synkroniseret. Tænk på det på denne måde:din JS-motor udfører serielt hver linje, den ser. Antag, at disse linjer holdes den ene efter den anden på en stak. Når det kommer til save
, holder det det til side på en anden stak (da det er en I/O-operation og derfor ville tage tid) og fortsætter med resten af løkken. Det viser sig, at motoren først ville tjekke denne nye stak, efter at den har fuldført hver linje på den ældre. Derfor er værdien af variablen cats
vil være det sidste element i arrayet. Det er således kun den sidste værdi, der gemmes.
For at bekæmpe denne tragedie kan du bruge flere metoder:
- Lukning - Læs mere
- Du kan lave lukning sådan:
cats.forEach()
- Du kan lave lukning sådan:
- Løfter - Læs mere . Der er et sødt bibliotek som lover mongo-driveren at gøre det lettere at arbejde med.
- Generatorer osv. - Læs mere . Ikke klar til primetime endnu.
Bemærkning om #2 - Jeg er ikke bidragyder til projektet, men samarbejder med forfatteren. Jeg har brugt biblioteket i godt et år nu, og det er hurtigt og fantastisk!