Acabo de darme cuenta de que lo siguiente funciona en el nodo 14.17.3:
a.js:
console.log("a.js executes") async function wait(){ console.log('wait runs') return new Promise((resolve, reject)=>{ setTimeout(()=>{resolve("foo")},3000) }) } export default await wait()b.js:
import data from './a.js' console.log("b.js executes") export default function test(){ console.log("b.js: imported from a.js:",data) }c.js:
import data from './a.js' console.log("c.js executes") export default function test(){ console.log("c.js: imported from a.js:",data) }d.js:
import test_b from './b.js' import test_c from './c.js' test_b() test_c() Cuando ejecuto d.js , obtengo el siguiente resultado, mientras que hay un retraso de 3 segundos entre la segunda y la tercera línea:
a.js executes wait runs b.js executes c.js executes b.js: imported from a.js foo c.js: imported from a.js: foo Esto es exactamente lo que quiero, pero no entiendo por qué funciona. El cargador de módulos parece esperar a que se resuelva la función de wait asíncrona, antes de ejecutar b.js y c.js e importar el valor resuelto a los módulos.
Apuesto a que esto no funcionó hace un par de años.
¿Alguien podría decirme cómo se llama esta función? ¿Es una característica del propio ES o del sistema de carga de módulos del nodo?