Comprensión del orden de ejecución en las promesas de JavaScript
Las promesas en JavaScript ofrecen un modelo de programación asincrónica donde el código se ejecuta una vez que se produce un evento o promesa específica , se cumple. Sin embargo, cuando se trata de promesas múltiples, es esencial comprender el orden de ejecución para evitar comportamientos impredecibles.
Considere el siguiente fragmento de código:
Promise.resolve('A') .then(function(a){console.log(2, a); return 'B';}) .then(function(a){ Promise.resolve('C') .then(function(a){console.log(7, a);}) .then(function(a){console.log(8, a);}); console.log(3, a); return a;}) .then(function(a){ Promise.resolve('D') .then(function(a){console.log(9, a);}) .then(function(a){console.log(10, a);}); console.log(4, a);}) .then(function(a){ console.log(5, a);}); console.log(1); setTimeout(function(){console.log(6)},0);
Al ejecutar, puede observar el siguiente orden de salida:
1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6
Comprensión del orden de ejecución
Promise.resolve('A').then(function (a) { consola.log(2, a); devolver 'B'; }).entonces(función (a) { var p = Promesa.resolve('C').luego(función (a) { consola.log(7, a); }).entonces(función (a) { consola.log(8, a); }); consola.log(3, a); devolver p; // Vincula la promesa interna a la cadena principal }).entonces(función (a) { var p = Promesa.resolve('D').luego(función (a) { consola.log(9, a); }).entonces(función (a) { consola.log(10, a); }); consola.log(4, a); devolver p; // Vincula la promesa interna a la cadena principal }).entonces(función (a) { consola.log(5, a); }); consola.log(1); setTimeout(función() { consola.log(6) }, 0);
Con este enfoque, el orden de ejecución se vuelve completamente determinista: 1, 2 "A", 3 "B", 7 "C", 8 indefinido, 4 indefinido, 9 "D", 10 indefinidos, 5 indefinidos y 6.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