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

168
Vistas
Comprender las funciones / promesas asíncronas

Estoy un poco confundido sobre lo que realmente hace la palabra clave "async" a una función en Javascript. Anteriormente, pensé que hacía que la función fuera asíncrona y sin bloqueo (ejecutarla posiblemente en un subproceso de trabajo separado, O al menos ponerla en cola en la cola de eventos, lo que retrasaría su invocación hasta que todo en la pila de llamadas hubiera terminado). Pero parece que ninguno de los dos es el caso basado en una prueba simple que realicé.

 async function asyncFunction() { for(let i = 0; i < 10000; i++) { console.log("i = ", i); } } function normalFunction() { console.log("I'm a normie!") } asyncFunction(); normalFunction(); /* OUTPUT i = 1 i = 2 i = 3 i = ... i = 9999 I'm a normie! */

Entonces, mi primera pregunta basada en este resultado es: 1. ¿Qué hace la palabra clave asíncrona incluso fuera del contexto de espera?

Además, pensé que esto era interesante, así que pensé en jugar un poco con las promesas para ver si mi comprensión también era incorrecta allí, lo que resulta que era...

 const myPromise = new Promise((resolve, reject) => { console.log("Hello from inside executor function"); resolve("beep bop"); }) myPromise.then((resolveValue => { console.log("resolveValue: ", resolveValue); })) console.log("Wasup"); /* OUTPUT Hello from inside executor function Wasup resolveValue: beep bop */

Antes de esta prueba, asumí incorrectamente que las promesas invocaban inmediatamente la función ejecutora a través de una llamada setTimeout(executor, 0) para retrasar (empujarlo a la cola de eventos) para que los enlaces .then correctos se adjunten antes de que se llamara . Asumí esto porque un artículo que leí sugirió que lo siguiente es cómo se implementan las Promesas bajo el capó...

 //Keep in mind the following is heavily oversimplified, non-chainable, and only accepts a resolve callback class Promise { constructor(executorFunc) { this.myResolve = () => {}; setTimeout(() => executorFunc(this.myResolve), 0); } then(newResolve){ this.myResolve = newResolve; } }

Pero la SALIDA de las segundas pruebas de promesa muestra que la función ejecutora en realidad se ejecuta de inmediato y solo las devoluciones de llamada adjuntas a través de .then se colocan en la cola de eventos en espera de que se complete la pila de llamadas actual. Entonces, mi segunda pregunta es 2. ¿Cómo es posible cambiar la implementación de la clase de promesa simplificada de modo que la lógica principal de la función ejecutora se ejecute de inmediato y solo las devoluciones de llamada se coloquen en la cola de eventos?

¿Es tan simple como cambiar

 setTimeout(() => executorFunc(this.myResolve), 0);

A

 executorFunc((data) => setTimeout(this.myResolve(data), 0));

Cualquier ayuda es muy apreciada. ¡Gracias!

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