Funciones asíncronas en javascript

Funciones asíncronas en javascript

Async/await es6

Por lo que tengo entendido, en ES7/ES2016 poner múltiples await en el código funcionará de forma similar a encadenar .then() con promesas, lo que significa que se ejecutarán una tras otra en lugar de en paralelo. Así, por ejemplo, tenemos este código:

EDIT: No estoy satisfecho con la solución aportada en esta pregunta: Ralentización por espera no paralela de promesas en generadores asíncronos, porque utiliza generadores y yo pregunto por un caso de uso más general.

Primero, ejecutar todas las llamadas asíncronas a la vez y obtener todos los objetos Promise. En segundo lugar, utiliza await en los objetos Promise. De esta manera, mientras esperas a que la primera Promise se resuelva, las otras llamadas asíncronas siguen avanzando. En general, sólo esperarás el tiempo que dure la llamada asíncrona más lenta. Por ejemplo

await Promise.all([someCall(), anotherCall()]); como ya se ha mencionado actuará como un thread fence (muy común en código paralelo como CUDA), por lo que permitirá que todas las promesas en él se ejecuten sin bloquearse entre sí, pero impedirá que la ejecución continúe hasta que TODAS se resuelvan.

Devoluciones de llamada síncronas y asíncronas en javascript

Así, async asegura que la función devuelve una promesa, y envuelve las no promesas en ella. Bastante simple, ¿verdad? Pero no sólo eso. Hay otra palabra clave, await, que sólo funciona dentro de las funciones asíncronas, y que es bastante interesante.

Al igual que promise.then, await nos permite utilizar objetos then (los que tienen un método callable then). La idea es que un objeto ajeno puede no ser una promesa, pero sí compatible con la promesa: si soporta .then, eso es suficiente para usarlo con await.

Si await obtiene un objeto no-promesa con .then, llama a ese método proporcionando las funciones incorporadas resolve y reject como argumentos (tal y como hace un ejecutor Promise normal). Luego await espera hasta que una de ellas sea llamada (en el ejemplo anterior ocurre en la línea (*)) y luego procede con el resultado.

Si nos olvidamos de añadir .catch allí, entonces obtendremos un error de promesa no manejada (visible en la consola). Podemos atrapar este tipo de errores utilizando un manejador de eventos global unhandledrejection como se describe en el capítulo Manejo de errores con promesas.

Async/await vs promesas

función asyncUna función async es una función declarada con la palabra clave async, y la palabra clave await está permitida dentro de ellas.  Las palabras clave async y await permiten escribir comportamientos asíncronos basados en promesas con un estilo más limpio, evitando la necesidad de configurar explícitamente cadenas de promesas.

DescripciónLas funciones async pueden contener cero o más expresiones await. Las expresiones await hacen que las funciones que devuelven promesas se comporten como si fueran síncronas, suspendiendo la ejecución hasta que la promesa devuelta se cumpla o sea rechazada. El valor resuelto de la promesa se trata como el valor de retorno de la expresión await. El uso de async y await permite el uso de bloques try / catch ordinarios alrededor del código asíncrono.

Javascript async/await

Quiero un comportamiento asíncrono usando async/await. Quiero que mi función pase toda la función a un bucle de eventos igual que hace SetTimeout, SetInterval para que mi hilo principal pueda seguir haciendo el resto a menos que esa funcionalidad pesada se esté ejecutando detrás de la escena.

Sólo que la función callback de setTimeout es empujada a la pila de llamadas después de que el temporizador haya expirado y la pila de llamadas esté vacía. Por eso, otro código puede ejecutarse antes de que la función callback de setTimeout se ejecute.

Poner tu código dentro de una función asíncrona no hace que tu código sea asíncrono; se ejecutará sincrónicamente hasta la primera expresión await. (Las promesas no hacen nada asíncrono. Son sólo un mecanismo de notificación que te avisa de la finalización con éxito o de un fallo de algo que ya es asíncrono).

Support-help2web

El equipo de Support-help2web publica un amplio contenido sobre informática, noticias y artículos de interés sobre proyectos electrónicos.

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.Más información
Privacidad