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

99
Vistas
Promise no parece resolverse con await

He encontrado algo interesante mientras jugaba con Promises y espera:

 function returnPromise() { return new Promise(resolve => { setTimeout(() => { resolve('result of promise'); }, 1000); }); } async function sth() { let result = await returnPromise(); console.log('result: ', result); console.log('flag 1'); } sth();

En este primer ejemplo, el resultado de la promesa se imprime correctamente. Sin embargo, considere el segundo ejemplo:

 function returnPromise() { return new Promise(resolve => { setTimeout(() => { resolve('result of promise'); }, 1000); }); } async function sth2() { let result = returnPromise(); await result; console.log('result: ', result); console.log('flag 1'); } sth2();

Aquí, el resultado es {} (que creo que significa que la Promesa aún está pendiente). Esto no tiene sentido para mí porque pensé que se suponía que la línea 'esperar resultado' se bloquearía hasta que se resolviera la Promesa.

Mi pregunta es:

  1. ¿Es este el comportamiento esperado? Si es así, ¿cuál es la lógica detrás de esto?
  2. Si esto no es lo que se espera, ¿por qué sucede esto?

Gracias.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Pensé que se suponía que la línea 'esperar resultado' se bloquearía hasta que se resolviera la Promesa.

Bueno, bloquea la ejecución adicional de esa función asíncrona , pero sí.

Pero el result sigue siendo una Promesa.

await tomará el thenable en su lado derecho, esperará a que termine y extraerá el valor de resolución de él. Pero thenable seguirá siendo thenable : no cambia la Promesa en sí misma (no cambia la expresión de la Promesa en el valor al que se resuelve).

 await someThenable

extrae el valor de resolución de someThenable , pero someThenable permanece como thenable : registrar someThenable , ya sea antes o después de await , aún registrará thenable y no el valor de resolución.

about 4 years ago · Juan Pablo Isaza Denunciar

0

let result = returnPromise();

Esta línea establece el valor de result para que sea una referencia al objeto Promise . No cambia automáticamente para ser el resultado de la promesa await await adelante.

Puede saber por el hecho de que todavía hay un período de espera que la palabra clave await está funcionando. Sin embargo, estás tirando el valor del resultado.

await le dará un valor que puede asignar a una variable:

 let actualResult = await result; // or result = await result; // but you shouldn't do this
about 4 years ago · Juan Pablo Isaza 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