Función asíncrona Invocación dentro de los bucles en JavaScript
La naturaleza asíncrona de JavaScript puede plantear desafíos al invocar funciones asíncronas dentro de los bucles. Considere el siguiente código:
for(var i = 0; iEl problema se encuentra con la función de devolución de llamada asíncrona, que puede ejecutarse después de que se haya completado el bucle for. En consecuencia, do_something (i) siempre hará referencia a la iteración final del bucle.
intento de solución con cierres
el desarrollador intentó usar cierres para capturar el valor de I dentro de cada iteración del bucle:
do_something((function(x){return x})(i))Sin embargo, este enfoque también falla porque la función se ejecuta inmediatamente, lo que resulta en el mismo problema.
solución usando foreach
una solución más eficiente es utilizar el método de foreach de JavaScript, que proporciona el ítem de la array y su índice a la función de devolución de llamada. Dado que cada devolución de llamada tiene su propio alcance, se conserva el valor de índice.
list.forEach(function(listItem, index){ mc_cli.get(listItem, function(err, response) { do_something(index); }); });utilizando foreach, las funciones de devolución de llamada ahora tienen acceso al valor del índice correcto para cada iteración, resolviendo el problema del índice incorrecto que se hace referencia en la función do_something.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3