Eso es porque save
es en realidad una operación de E/S que es asíncrona. Ahora, el for
el bucle en realidad está sincronizado. Piénselo de esta manera:su motor JS ejecuta en serie cada línea que ve. Suponga que estas líneas se guardan una tras otra en una pila. Cuando se trata de save
, lo mantiene a un lado en una pila diferente (ya que es una operación de E/S y, por lo tanto, llevaría tiempo) y continúa con el resto del bucle. Resulta que el motor solo verificaría esta nueva pila después de haber completado cada línea en la anterior. Por tanto, el valor de la variable cats
será el último elemento de la matriz. Por lo tanto, solo se guarda el último valor.
Para luchar contra esta tragedia, puede utilizar varios métodos:
- Cierres:Leer más
- Puede hacer un cierre así:
cats.forEach()
- Puede hacer un cierre así:
- Promesas:Leer más . Hay una dulce biblioteca que promete que el controlador mongo facilitará el trabajo.
- Generadores, etc. - Leer más . Todavía no está listo para el horario de máxima audiencia.
Nota sobre el n.º 2:no soy colaborador del proyecto, pero trabajo con el autor. ¡He estado usando la biblioteca durante más de un año y es rápida e increíble!