w3schools trabajar sincronas promises promesas platzi para funciones example con anidadas javascript promise ecmascript-6 es6-promise

trabajar - promises javascript w3schools



¿Por qué las promesas de JavaScript ES6 continúan la ejecución después de una resolución? (2)

Según tengo entendido, una promesa es algo que puede resolver () o rechazar (), pero me sorprendió descubrir que el código en la promesa continúa ejecutándose después de que se llama a una resolución o rechazo.

Considere que resolver o rechazar es una versión asíncrona de salida o retorno, que detendría la ejecución inmediata de todas las funciones.

¿Alguien puede explicar el pensamiento detrás de por qué el siguiente ejemplo a veces muestra el archivo console.log después de una llamada de resolución:

var call = function() { return new Promise(function(resolve, reject) { resolve(); console.log("Doing more stuff, should not be visible after a resolve!"); }); }; call().then(function() { console.log("resolved"); });

jsbin


JavaScript tiene el concepto de "ejecutar hasta completar" . A menos que se genere un error, se ejecuta una función hasta que se alcanza una declaración de return o se finaliza. Otro código fuera de la función no puede interferir con eso (a menos que, nuevamente, se arroje un error).

Si desea que resolve() salga de su función de inicializador, debe anteponerlo return :

return new Promise(function(resolve, reject) { return resolve(); console.log("Not doing more stuff after a return statement"); });


Las devoluciones de llamada que se invocarán cuando resolve una promesa todavía son requeridas por la especificación para ser llamadas asincrónicamente. Esto es para garantizar un comportamiento consistente cuando se usan promesas para una combinación de acciones síncronas y asíncronas.

Por lo tanto, cuando invoque resolve la devolución de llamada se pone en cola y la ejecución de la función continúa inmediatamente con cualquier código que siga a la llamada a resolve() .

Solo una vez que se devuelve el control del bucle de eventos JS, se puede eliminar la devolución de llamada de la cola e invocarla realmente.