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

176
Vistas
¿Por qué la espera de una llamada de función nula afecta la salida del bloque?

De acuerdo con MDN Web Docs , "esperar" se usa para "esperar una Promesa", pero la expresión que sigue a la palabra clave también puede ser "cualquier valor para esperar", por lo tanto, no necesariamente una Promesa.

En la siguiente demostración, el valor esperado es una llamada a una función nula, es decir, una función que implícitamente devuelve "indefinido". Nota: la función llamada no devuelve una Promesa. ¿Qué significa exactamente esperar una llamada de función nula?

Demostración: agregue la palabra clave "await" al comienzo de la línea 11 y vea cómo cambia el registro de "FC" a "CF".

 "use strict"; function pr() { return Promise.resolve(null); } function invokeAsyncOperation(cb) { pr().finally(cb); } async function main() { try { // demo: await the following statement invokeAsyncOperation(() => console.log("C")); } catch (e) {} finally { console.log("F"); } } main();

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

0

Estás viendo el resultado de dos cosas:

  1. De los documentos que vinculaste:

    Si el valor de la expresión que sigue al operador await no es una Promesa, se convierte en una Promesa resuelta .

    En términos generales,¹ await x donde x no es una promesa es lo mismo que await Promise.resolve(x) . Entonces, cuando usa await , siempre hay una promesa involucrada.

  2. Los controladores de finalización de promesa siempre se llaman de forma asíncrona, x y await x tienen tiempos diferentes: el primero es síncrono; este último es asíncrono:

    • Se crea una promesa, se cumple con x .
    • await pone un controlador de finalización en la promesa.
    • Dado que la promesa ya se cumplió, se coloca una llamada a ese controlador de finalización en la cola de microtareas para que se maneje cuando se ejecutan las microtareas al final de la tarea actual.
    • Cuando se ejecutan las microtareas, se alcanza la finalización de la promesa y se realiza el console.log .

Verá el registro de C antes que el registro de F porque el controlador de finalización que registra C ya está en la cola de microtareas antes de que se agregue el controlador de finalización para F , por lo que se ejecuta primero.


¹ En realidad, Promise.resolve siempre está involucrado, incluso cuando x ya es una promesa. Pero la promesa adicional se optimiza si x ya es una promesa nativa (de la misma clase concreta). Puede ver la operación de resolución en el Paso 2 del algoritmo para await .

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