Código de muestra:
async function foo(i) { await new Promise(resolve => setTimeout(resolve, 5000)); console.log('Completed foo', i); } async function bar(i) { await new Promise(resolve => setTimeout(resolve, 5000)); console.log('Completed bar', i); } for (let i = 0; i < 10; i++) { foo(i); console.log('Fired', i); await bar(i); } console.log('Done firing all async functions, unblocking...');Cuando ejecuto esto, aparece un error en la última línea del ciclo for que indica que solo puedo esperar dentro de una función asíncrona.
De todos modos, esta pregunta es para hacer: cuando se ejecuta la primera iteración del bucle for, foo se agregará inmediatamente a la cola de tareas. Luego, el registro de la consola se ejecutará imprimiendo Disparado. Luego agregará la barra a la cola de tareas y esperará la respuesta. Por lo tanto, bloquee las iteraciones del bucle for hasta que se complete la ejecución de la barra.
En este punto, el hilo principal es gratuito. ¿Cuál es el comportamiento en términos de si foo o bar se recogerán de la cola de tareas y se colocarán en la pila para que el hilo principal los ejecute?