Y también, si la función Async devuelve una promesa, no devuelve la misma promesa, pero esa promesa se cambia de alguna manera, por lo que no es igual a sí misma. ¿Y hay alguna diferencia si devuelvo una promesa sincrónicamente sin esperas o con ellas?
let promise = new Promise(resolve => resolve()); async function test() { return promise; } console.log(promise === test()); // falseLa palabra clave async siempre hace que una función cree y devuelva una nueva promesa que solo se resolverá después de que se complete todo el trabajo (asíncrono y síncrono) de esa función.
En otros lenguajes como C#, tendría que return await promise , o el código de llamada tendría que await await test() , ya que return promise haría que la función async devolviera una promesa con otra promesa dentro.
En JavaScript, cuando devuelve una promesa desde dentro de una función asíncrona, la promesa que en realidad se devuelve desde su función sabe await de manera efectiva esa otra promesa y resolver con el valor (si lo hay) que devuelve. Este comportamiento es simplemente una conveniencia, porque hay muy, muy pocos casos de uso para devolver promesas anidadas, mientras que es muy probable que alguien cometa el error de olvidarse de await una promesa antes de devolverla. Pero la función async aún devuelve una nueva promesa, no la proporcionada por la declaración de return .