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

173
Visualizações
¿Por qué una promesa resuelta aún en estado pendiente?

Ejemplo:

 let a = Promise.resolve("123") .then(val => { console.log(a); return 100; }) .then(val => { console.log(val); console.log(a); }) .finally(() => { console.log(a); });

Producción:

 Promise { <pending> } 100 Promise { <pending> } Promise { <pending> }

¿Por qué una promesa resuelta aún en estado pendiente?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Entonces, a contiene el resultado de ejecutar todo esto:

 let a = Promise.resolve(...).then(...).then(...).finally(...);

Cada paso de esa fase crea a nueva promesa y contiene la última de la cadena (la última promesa es la que .finally() ). Cada vez que inicia a , está registrando la promesa final y aún no se ha resuelto hasta que se completa la cadena.

Tenga en cuenta que todos estos .then() y .finally() se ejecutan inmediatamente y cada uno devuelve una nueva promesa. Cuando se ejecutan, registran las devoluciones de llamada que se les pasan de manera que esas devoluciones de llamada se puedan llamar más tarde cuando la promesa con la que están asociados se resuelva o rechace. A pesar de que la primera promesa se resuelve de inmediato, todavía no ejecuta sus controladores .then() hasta después de que se ejecuta toda esta cadena de .then().then().finally() y se crean todas las promesas en esa cadena y todos los manejadores especificados en esa cadena están registrados. Por lo tanto, a contiene la cuarta promesa que .finally() , no la promesa que crea Promise.resolve() y esa cuarta promesa no se resuelve hasta que todos los controladores de su cadena hayan terminado de ejecutarse. Dado que está realizando el registro de todos esos controladores, es por eso que la última promesa en la cadena todavía se muestra como pending en todos los lugares donde la está registrando.

Si haces las cosas de manera diferente como esta:

 let d = Promise.resolve("123"); d.then(val => { console.log(d); return 100; }).then(val => { console.log(val); console.log(d); }).finally(() => { console.log(d); });

Entonces, verás esto:

 Promise { '123' } 100 Promise { '123' } Promise { '123' }

Porque ahora d representa la primera promesa de la cadena, no la promesa final de la cadena, por lo que se resuelve cuando se ejecutan todos los demás controladores.

Entonces, probablemente la parte operativa aquí de la que no estabas al tanto es que cada .then() , .catch() o .finally() devuelve una nueva promesa que está enganchada a la cadena frente a ella. Su console.log(a) original estaba monitoreando solo la última promesa en la cadena, no la primera promesa en la cadena o no la promesa actual en la cadena.

about 4 years ago · Juan Pablo Isaza 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