Bug en la función For Each

Buenas tardes,

EN el video de crear opciones para los productos, casi al final, se reporta un bug en la función for each cuando se quiere concatenar los nombres de las opciones escogidas. Parece que el hilo se salta las iteraciones y va directo a la funcion posterior al for each. La “solucion” propuesta en el video es poner un set time out despues del for each y antes del callback. Esto por supuesto es una solucion coja porque entre otras cosas afecta a la experiencia del usuario. Además este issue afecta a todas las funciones que usan for each, por ejemplo el calculo de los minimos. ¿Hay alguna solucion? No se puede confiar en estas funciones.

gracias

Buena tarde,

No es propiamente un bug, ya que la ejecución asíncrona de las funciones iterantes es una funcionalidad muy últil para acelerar el llamado a varias ejeciciones paralelas como notificar a cientos de conductores por ejemplo, hace la ejecución mas rapida.

Lo que si es cierto es que en ejecuciones de funciones iterantes que requieres una secuencia síncrona de ejecución puede resultar un tema complicado, ya hay una tarea en desarrollo para poder indicar si buscas ejecución sincrona o asíncrona en la iteración, porque como ya lo menciono el hacer toda ejecución sincrona generaría tareas lentas en situaciones donde no fuera necesaria.

Puedes ver el progreso y votar por la tarea aquí: https://ideas.apphive.io/posts/3/callback-al-for-each

Además, específicamente con este caso y ampliando esta explicación hicimos un live en el cual se hicieron diferentes aproximaciones para mostrar la ejecución de este tipo de funciones https://youtu.be/dOmqd1nPTes

Gracias por la respuesta, definitivamente voy a ver los videos, sin embargo:

  • El hecho de que tu mismo no estabas consciente del problema al ejecutar el proceso “concatenar adicionales” me demuestra que esto es un error mas que un “feature”.

  • El hilo de ejecución parece saltar del for each a la función siguiente, es decir que no es que las iteraciones corran de manera asíncrona, sino que parece que todas las funciones dentro de un proceso lo hacen.
    -La función renageriteration tiene un callback “onFinish” que tampoco funciona. Es decir no se ejecuta al final de las iteraciones.

  • Porqué a la función rangeiteration se debe poner el parámetro “end” dos indices mas arriba? Si tengo cuatro opciones debe ir del uno al cuatro incluidos, no del uno al seis como en tu demo. Esto parece otro bug.

  • Puedes poner un ejemplo de como realizar correctamente el proceso “Concatenar adicionales”? Sin set time out? Te comento que revise la lógica varias veces y el resultado es completamente aleatorio.

  • Al realizar el proceso “Calcular los minimos” me ocurre un problema similar. Me di cuenta porque al ejecutarla poniento un Send alert al final de la iteración el resultado era correcto. Si quitaba el alert daba error. Sin absolutamente ningún otro cambio. Tuve que poner un set time out en lugar del alert para dejarlo funcionando, pero eso introduce un delay innecesario. De nuevo esto parece más un bug que un feature. La plataforma es inestable debido a esto. ¿Puedes proponer una solución a estos problemas que no pase por poner un settimeout? Te loa agradecería

  • Finalmente el comportamiento usual de un bucle for es secuencial, no asíncrono. Si realmente es un feature debería ir con letras grandes en el manual.

Saludos cordiales,

Marcelo