Digamos que tengo esta función.
function sendMessage(message, content) { return message.send(content); }el mensaje devuelve una promesa, pero en realidad no necesito resolver la promesa ya que no me importa el valor devuelto.
En otra función asíncrona, llamo a sendMessage de la siguiente manera:
await sendMessage(message, 'Hello')contra
return sendMessage(message, 'Hello')La función asíncrona a la que estoy llamando se está esperando en el nivel superior.
Mi pregunta es cuál es la diferencia entre esperar y regresar, ya que la función sendMessage no es asíncrona y no necesito el valor devuelto. ¿Qué sería más rápido en términos de rendimiento y velocidad de bucle de eventos más eficiente, si es que hay alguna diferencia? ¡Gracias!
No hay una diferencia de rendimiento entre los dos; Si no necesita usar el valor de la promesa resuelta, no debería usar return o await .
Como mencionan los documentos oficiales de mozilla :
Una función asíncrona es una función declarada con la palabra clave asíncrona y la palabra clave espera está permitida dentro de ella. Las palabras clave async y await permiten que el comportamiento asincrónico basado en promesas se escriba en un estilo más claro, lo que evita la necesidad de configurar explícitamente cadenas de promesas.
Se puede pensar que el cuerpo de una función asíncrona está dividido por cero o más expresiones de espera. El código de nivel superior, hasta la primera expresión de espera incluida (si la hay), se ejecuta de forma síncrona. De esta forma, una función asíncrona sin una expresión de espera se ejecutará de forma síncrona. Sin embargo, si hay una expresión de espera dentro del cuerpo de la función, la función asíncrona siempre se completará de forma asíncrona.
Por otra parte, generalmente usamos funciones async y await palabra clave principalmente para evitar el encadenamiento de promesas ( promise.then() varias veces, lo que hace que nuestro código sea realmente desordenado e ilegible) cuando ejecutamos varias promesas sincrónicamente. Dado que su código contenía solo una promesa, básicamente await a que la promesa se cumpla o devolverla directamente será lo mismo.
async/await solo es azúcar sintáctico, espera que se use con async; de lo contrario, arrojará un error y lo transformará en una promesa, la promesa es asíncrona, no la promesa es sincronización, afectará el orden de ejecución del subproceso.