Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

234
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda