Encontré esta nota en whatwg spec:
Es posible que una microtarea se mueva a una cola de tareas normal si, durante su ejecución inicial, hace girar el bucle de eventos. Este es el único caso en el que se consulta el conjunto de objetos de configuración del entorno de evaluación de fuente, documento y script de la microtarea; son ignorados por el algoritmo de punto de control de realizar una microtarea.
¿Cuál es un ejemplo de ello, que expresa esta cita? ¿Cómo es posible mover una microtarea de la pila de microtareas a la pila de macrotareas y realizarla como una macrotarea?
Esto estaba aquí para showModalDialog , que solía cargar un documento en un modal, bloqueando el documento inicial hasta que se cierra este modal... Para que esto suceda, la UA tuvo que "girar el ciclo de eventos" hasta que se cerró el documento del modal. Esta macro de "girar el bucle de eventos" convierte la microtarea en una tarea "simple".
El método showModalDialog() se eliminó de las especificaciones, pero se mantuvo, ya que también se puede usar en otros modales o para permitir que la UA cortocircuite las "tareas largas", de modo que puedan actualizar la representación y, por ejemplo, mostrar un mensaje. al usuario sobre el script largo.
Esto se recomienda, por ejemplo, en una nota sobre la pausa , llamada por todos los modales como alert() , prompt() , etc.:
La pausa es muy perjudicial para la experiencia del usuario, especialmente en escenarios en los que un único bucle de eventos se comparte entre varios documentos. Se alienta a los agentes de usuario a experimentar con alternativas a la pausa, como hacer girar el bucle de eventos o simplemente continuar sin ningún tipo de ejecución suspendida, en la medida en que sea posible hacerlo manteniendo la compatibilidad con el contenido existente.
También tienes eso en algunos navegadores con bucles infinitos, donde pausarán el script y mostrarán un mensaje como " Un script en esta página está tardando demasiado, ¿quieres esperar o matarlo con fuego? ".
Como ejemplo, en Firefox, ambos casos activarán una actualización de representación cuando se muestre el aviso al usuario, es decir, hacen girar el bucle de eventos . Entonces, si la "pausa" se activó desde dentro de una microtarea, deben moverla a una macrotarea cuando se reanude.
Sin embargo, IIRC, en realidad usan una versión personalizada de girar el ciclo de eventos que solo permite la fase de representación (sin devoluciones de llamada) y nada más. Y la microtarea no se convierte realmente en una tarea ni siquiera allí.
Hay discusiones activas , donde se planea "eliminar este concepto" de volver a ingresar microtareas, ya que en realidad no lo usan los implementadores. E incluso si lo fuera, no estoy seguro de que sería observable para nosotros.