Afirmo que no soy un experto en JavaScript, y ahora estoy empezando a profundizar en él.
Este post pretende aclarar algunas dudas sobre las funciones async/away que recién empiezo a profundizar.
El siguiente ejemplo me deja perplejo sobre la secuencia de ejecución que parece, según los registros impresos en la consola, diferente de lo que esperaba.
Antes de exponer mi duda y mi pregunta de aclaración les muestro mi código de ejemplo:
async function fetchAlbum(id){ let album; album = await fetch(albumUrl + '/' +id) .then( resp => resp.json()) .then(albumcontent => albumcontent); console.log('Concrete Value 1',album); //Here is printed the concrete value thanks to await is not undefined return album; //Here the concrete value is wrapped by a promise (the value is returned to the caller in the form of a promise) } let alb = fetchAlbum(1); console.log('Promise 1',alb); //Print a promise... will be the first logged (!?) alb.then(alb => console.log('Concrete Value 2',alb)); //We have the album again as a concrete value (the album object)Creé una función asíncrona fetchAlbum dentro de la cual resuelvo las promesas devueltas por la API fetch() con el prefijo await. Por lo tanto, espero que en la llamada fetchAlbum (1) el código espere hasta que se realice el "álbum de devolución" dentro de la función async fetchAlbum (id). Pero en realidad, este no es el caso. Mirando las pistas en la consola, veo:
"Promise 1", luego "Concrete Value 1" y finalmente "Concrete Value 2", este último impreso por la función de devolución de llamada de la promesa devuelta por la función async fetchAlbum.
Lo que entiendo es que JavaScript (ES6), simplemente llamado función asíncrona, devuelve la promesa continuando con el flujo de ejecución siguiendo la llamada let alb = fetchAlbum (1); y en cuanto termine la cadena de promesas, imprimirá "Valor Concreto 1" y finalmente, pasará por "álbum de regreso".
La pregunta es, suponiendo que mi suposición sea correcta, ¿cómo JavaScript devuelve inmediatamente la promesa (en estado pendiente) sin pasar por el "retorno"?
Todavía estoy un poco confundido y cualquier sugerencia para entender será muy bienvenida para mí.
Espero haber expuesto mi perplejidad y mi pregunta de la forma más comprensible posible.
Muchas gracias.