Imaginemos que tenemos un archivo que contiene el siguiente código JS:
process.nextTick(()=>{ console.log('nextTick') }) queueMicrotask(()=>{ console.log('queueMicrotask') }) console.log('console.log')
y hemos configurado el sistema de módulos para "type": "commonjs"
en nuestro paquete.json
¿Qué salida en la consola esperamos? La documentación oficial de Node.js dice:
Entonces, en la consola esperamos
console.log nextTick queueMicrotask
Y eso funciona Hasta que cambie el sistema de módulos a "type": "module"
. Después de ese cambio, constantemente se ejecuta queueMicrotask antes de process.nextTick . La salida de la consola es:
console.log queueMicrotask nextTick
¿Alguien puede explicar ese comportamiento? Puedo suponer que ese comportamiento de alguna manera está relacionado con la evaluación del módulo y el proceso de ejecución y que nextTick queueMicrotask de alguna manera entra en diferentes eventos de ciclo, ya que el módulo implica una ejecución asíncrona (en el navegador), pero esa suposición es muy inestable y, desde mi punto de vista, es ilógico. Sin embargo, todavía no tengo una explicación plausible.