Itu karena save
sebenarnya adalah operasi I/O yang Async. Sekarang, for
loop sebenarnya disinkronkan. Pikirkan seperti ini:mesin JS Anda secara serial mengeksekusi setiap baris yang dilihatnya. Asumsikan baris-baris ini disimpan satu demi satu di tumpukan. Ketika datang ke save
, itu menyimpannya di tumpukan yang berbeda (karena ini adalah operasi I/O, dan dengan demikian akan memakan waktu) dan melanjutkan dengan sisa loop. Ternyata mesin hanya akan memeriksa tumpukan baru ini setelah menyelesaikan setiap baris pada tumpukan yang lebih lama. Oleh karena itu, nilai variabel cats
akan menjadi item terakhir dalam array. Jadi, hanya nilai terakhir yang disimpan.
Untuk melawan tragedi ini, Anda dapat menggunakan beberapa metode:
- Penutupan - Baca Selengkapnya
- Anda dapat membuat penutupan seperti ini:
cats.forEach()
- Anda dapat membuat penutupan seperti ini:
- Janji - Baca Selengkapnya . Ada perpustakaan manis yang menjanjikan driver mongo untuk membuatnya lebih mudah digunakan.
- Generator, dll. - Baca Selengkapnya . Belum siap untuk primetime.
Catatan tentang #2 - Saya bukan kontributor proyek, tetapi bekerja dengan penulis. Saya telah menggunakan perpustakaan selama lebih dari satu tahun sekarang, dan ini cepat dan mengagumkan!