El motor Javascript ejecuta el código en el hilo principal único.
El subproceso principal no se bloqueará en una llamada de función asíncrona a menos que se use la palabra clave await fnnane();
Cuando hay una función asíncrona como setTimeout o fetch, se entrega a la API del motor de Javascript respectivo para que funcione por separado del hilo principal.
La respuesta (y el código de función subsiguiente) se agrega a la cola de tareas.
Pero cuando hay una Promesa como se muestra a continuación, ¿dónde se pasa o el hilo principal la ejecuta?
async function foo(i) { await new Promise(resolve => setTimeout(resolve, 5000)); console.log('Completed foo', i); }