Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

276
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!