Soy muy nuevo en Javascript asincrónico y estaba estudiando la función async/await. Tengo una especie de pregunta básica sobre el código adjunto. Cuando ejecuto el código, creo que la función asíncrona debería esperar (debido a la palabra clave await) y colocarse en la cola de microtareas, suspendiendo así su ejecución. Por lo tanto, la pila de llamadas debe ejecutar la consola. Así que pensé que la salida debería haber sido primero (el número aleatorio) y luego segundo. Pero para mi sorpresa ese no es el caso. ¿Puede alguien explicar por qué sucedió esto de una manera simplificada?
function randomFunction() { //generates a random number and prints it const number = Math.floor(Math.random() * 100); console.log(number); } async function asyncWithCallback(callback) { await randomFunction(); callback(); } function callback() { console.log('second'); } asyncWithCallback(callback); console.log('first');await primero evalúa la expresión que le sigue, y solo entonces la función async regresa (con una promesa), suspendiendo la función para más adelante.
Entonces, la salida de randomFunction se produce sincrónicamente , y luego procede como usted describe: "primero" también se genera sincrónicamente.
Luego, la pila de llamadas se vacía y llegamos a la "fase asíncrona": el motor procesa el trabajo en la cola PromiseJob, que reanuda la función async , que llama a la callback de llamada donde se emite "segundo".