Tengo una matriz [1,2,3,4,5] y cuando la inserto en la base de datos, excepto que recibo un resultado como [1,2,3,4,5] en la base de datos. Pero solo el bucle para darme un resultado esperado, map() y forEach() siempre me dan una matriz desordenada como [1,3,4,5,2] o [4,3,2,5,1] y así sucesivamente. Este es mi código:
arrayChild.map(async item => { await this.repository.save(item) }); arrayChild.forEach(async item => { await this.repository.save(item) }); for (let i = 0; i < arrayChild.length; i++) { await this.repository.save(arrayChild[i]) }Por favor, dame la razón. Gracias por su atención
porque los métodos map y forEach no manejan la función asíncrona que pasó de forma async await .
Cuando verifique el polyfill de ambos métodos, encontrará una línea como esta callback.call(T, kValue, k, O); . Entonces, básicamente, solo ejecuta la callback de llamada. Si la callback de llamada es un método asíncrono, no espera a que se realice su ejecución. En cambio, continúa ejecutando otros códigos.
Entonces, cuando guarda su conjunto de datos en la base de datos, sus devoluciones de llamada dentro del map y forEach solo emiten algunas consultas, el orden final de ejecución de la base de datos puede ser incierto.
Debido a que await no funciona en los métodos forEach y map, no es asíncrono. Por lo tanto, cuando usa los métodos await en forEach o map para guardar datos en db, ejecutará los bucles simultáneamente y los resultados serán desordenados.