Đó là vì save
thực sự là một hoạt động I / O là Async. Bây giờ, for
Vòng lặp thực sự là đồng bộ hóa. Hãy nghĩ về nó theo cách này:công cụ JS của bạn thực thi tuần tự từng dòng mà nó nhìn thấy. Giả sử các dòng này được giữ nối tiếp nhau trên một ngăn xếp. Khi nói đến save
, nó giữ nó sang một bên trên một ngăn xếp khác (vì nó là một hoạt động I / O, và do đó sẽ mất thời gian) và tiếp tục với phần còn lại của vòng lặp. Hóa ra là engine sẽ chỉ kiểm tra ngăn xếp mới này sau khi nó đã hoàn thành mọi dòng trên ngăn xếp cũ hơn. Do đó, giá trị của biến cats
sẽ là mục cuối cùng trong mảng. Do đó, chỉ giá trị cuối cùng được lưu.
Để chống lại thảm kịch này, bạn có thể sử dụng nhiều phương pháp:
- Closures - Đọc thêm
- Bạn có thể đóng như vậy:
cats.forEach()
- Bạn có thể đóng như vậy:
- Lời hứa - Đọc thêm . Có một thư viện ngọt ngào sẽ quảng cáo trình điều khiển mongo để giúp bạn làm việc dễ dàng hơn.
- Trình tạo, v.v. - Đọc thêm . Chưa sẵn sàng cho khung giờ vàng.
Lưu ý về # 2 - Tôi không phải là người đóng góp cho dự án, nhưng làm việc với tác giả. Tôi đã sử dụng thư viện được hơn một năm rồi, nó nhanh và tuyệt vời!