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

270
Vistas
¿Por qué es la ejecución suspendida del contexto en el modelo eventloop?

Dando el código al instante:

 setTimeout(() => console.log("next macro")); /// next macro Promise.resolve().then(() => gen.next()) /// microtask inside, #2 const gen = (function*(){ console.log("Hello"); yield; /// #3 console.log("World"); })(); gen.next(); console.log("main script has been ended"); /// #1

Como saben, los generadores se pueden suspender. Entonces, más adelante podemos volver a la función de generador cuando algún código invoque cierto código relacionado con el generador.

Este código tiene 2 macrotareas y 1 microtarea. Usted sabe que eventloop no ejecutará microtareas hasta que la macrotarea no haya terminado. Ya que cuando la macrotarea habrá terminado #1, entonces la microtarea estará activa #2 y exactamente el código dentro de esta microtarea nos devuelve a la función generadora #3, y habremos ejecutado console.log("World").

Entonces mi pregunta es: ¿por cuál es el código que ejecuta el código del generador, reanuda y restaura el contexto de ejecución del generador? ¿Es una tarea macro o micro dentro del bucle de eventos cuando lo invocamos dentro de una tarea micro? ¿El contexto de ejecución restaurado del generador es una microtarea, cuando lo estamos ejecutando?

PD Es posible que no entienda porque no sé cómo expresar mi pensamiento correctamente.

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

0

¿Por cuál es el código que ejecuta el código del generador, reanuda y restaura el contexto de ejecución del generador? ¿Es una tarea macro o micro dentro del bucle de eventos cuando lo invocamos dentro de una tarea micro?

Se ejecuta cada vez que se llama a next() en el generador. Si esa llamada ocurre como parte de una tarea de macro, sigue siendo parte de esa tarea de macro. Si esa llamada ocurre como parte de una microtarea, sigue siendo parte de esa microtarea. De hecho, la pila de llamadas aumentó al reanudar el código del generador y vuelve al código que lo reanudó (como con next() ).

Dado que en su ejemplo llama a next() tanto en el código síncrono como en then devolución de llamada, primero se ejecuta como parte de la macro tarea y luego como parte de una micro tarea. En ese sentido, no es diferente a hacer una llamada de función.

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