To dlatego, że save
jest w rzeczywistości operacją we/wy, która jest asynchroniczna. Teraz for
pętla jest w rzeczywistości synchronizowana. Pomyśl o tym w ten sposób:Twój silnik JS seryjnie wykonuje każdą linię, którą widzi. Załóżmy, że te linie są utrzymywane jedna po drugiej na stosie. Jeśli chodzi o save
, trzyma go z boku na innym stosie (ponieważ jest to operacja we/wy, a zatem zabiera trochę czasu) i kontynuuje z resztą pętli. Okazuje się więc, że silnik sprawdzi ten nowy stos dopiero po ukończeniu każdej linii na starszym. Dlatego wartość zmiennej cats
będzie ostatnim elementem tablicy. W ten sposób zapisywana jest tylko ostatnia wartość.
Aby zwalczyć tę tragedię, możesz użyć wielu metod:
- Zamknięcia – Więcej informacji
- Możesz dokonać zamknięcia w następujący sposób:
cats.forEach()
- Możesz dokonać zamknięcia w następujący sposób:
- Obietnice – Więcej informacji . Istnieje słodka biblioteka co obiecuje kierowcy mongo, aby ułatwić pracę.
- Generatory itp. — Czytaj więcej . Nie jest jeszcze gotowy na primetime.
Uwaga do punktu 2 — nie jestem współtwórcą projektu, ale pracuję z autorem. Korzystam z biblioteki od ponad roku i jest szybka i niesamowita!