Tengo una pregunta sobre la ejecución async/await.
códigos de ejemplo
async firstMethod(){ new Promise((resolve, reject)) => { setTimeout(() => { resolve("test1"); }, 3000); }); } async secondMethod() { new Promise((resolve, reject)) => { setTimeout(() => { resolve("test2"); }, 1000); }); } await firstMethod(); await secondMethod();Entonces, cuando se ejecutan los dos métodos, se obtienen los siguientes resultados.
test2 test1Sin embargo, si se adjunta una declaración, el valor del resultado es el siguiente.
async firstMethod(){ return new Promise((resolve, reject)) => { setTimeout(() => { resolve("test1"); }, 3000); }); } async secondMethod() { return new Promise((resolve, reject)) => { setTimeout(() => { resolve("test2"); }, 1000); }); } await firstMethod(); await secondMethod(); test1 test2¿Porqué es eso? Te agradecería si pudieras explicarlo.
En el primer caso, solo espera las promesas externas (que son las funciones firstMethod y secondMethod ) y las promesas internas creadas por new Promise no se esperan y simplemente se ejecutan hasta completarse en segundo plano.
En el segundo caso, debido al desenvolvimiento de la promesa , espera las promesas internas devueltas junto con las promesas de funciones externas.
La razón por la que en el primer ejemplo esas 2 funciones no se ejecutan en orden es porque no estás esperando nada. Si intenta eliminar el async de la definición de la función en el primer ejemplo, obtendrá el mismo resultado porque la función no necesita el async porque no requiere una await . Lo que podría hacer para obtener el mismo resultado que el segundo ejemplo es agregar una await antes de la new Promise .
Nota: Tampoco necesita el async en el segundo ejemplo porque no está esperando nada, solo está devolviendo una Promise en la que espera fuera del alcance.