Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

235
Vistas
¿Por qué javascript ES6 Promises continúa ejecutándose después de una resolución?

Según entiendo, 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 resolver o rechazar.

Consideré resolver o rechazar como una versión asincrónica de exit o return , que detendría toda la ejecución inmediata de 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

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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

Si desea que resolve() salga de su función de inicialización, debe anteponerla con return :

 return new Promise(function(resolve, reject) { return resolve(); console.log("Not doing more stuff after a return statement"); });
over 4 years ago · Santiago Trujillo Denunciar

0

La especificación aún requiere que las devoluciones de llamada que se invocarán cuando resolve una promesa se llamen de forma asincrónica. Esto es para garantizar un comportamiento coherente cuando se usan promesas para una combinación de acciones sincrónicas y asincrónicas.

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 resolve() .

Solo una vez que se devuelve el control al bucle de eventos JS, la devolución de llamada se puede eliminar de la cola y se puede invocar.

over 4 years ago · Santiago Trujillo Denunciar

0

La función resolve() no se parece en nada a return . Simplemente indica que el argumento de la función de devolución de llamada que se registró con el método then() ahora está listo y la función de devolución de llamada puede abandonar potencialmente la cola de trabajo (o la cola de microtarea) e ingresar a la pila de llamadas JS principal, pero eso solo sucede cuando todos los códigos síncronos y los códigos asíncronos que ingresaron a la cola antes de que este terminara de ejecutarse. console.log("Not doing more stuff after a return statement"); esta declaración en su código es un código síncrono y tiene prioridad sobre los códigos asíncronos. Por eso corre primero

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda