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

169
Visualizações
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 à 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