Antes de la versión 7.6 de Node, las devoluciones de llamada eran la única forma oficial proporcionada por Node para ejecutar una función tras otra. Como la arquitectura de Node es de subproceso único y asíncrona, la comunidad ideó las funciones de devolución de llamada, que se activarían (o ejecutarían) después de que se complete la ejecución de la primera función (a la que se asignaron las devoluciones de llamada).
Ejemplo de devolución de llamada :
app.get('/', function(){ function1(arg1, function(){ ... }) });
El problema con este tipo de código es que este tipo de situaciones pueden causar muchos problemas y el código puede ensuciarse cuando hay varias funciones. Esta situación se denomina lo que comúnmente se conoce como un infierno de devolución de llamada .
Entonces, para encontrar una salida, se introdujo la idea de las Promesas y el enstringmiento de funciones .
Ejemplo: Antes de async/await
function fun1(req, res){ return request.get('http://localhost:3000') .catch((err) =>{ console.log('found error'); }).then((res) =>{ console.log('get request returned.'); });
Explicación:
el código anterior muestra una función implementada con enstringmiento de funciones en lugar de devoluciones de llamada. Se puede observar que el código ahora es más fácil de entender y leer. El código básicamente dice que GET localhost:3000 , detecta el error si hay alguno; si no hay ningún error , implemente la siguiente instrucción:
console.log(‘obtener solicitud devuelta.’);
Con Node v8, la función async/await fue implementada oficialmente por Node para lidiar con Promises y el enstringmiento de funciones. No es necesario enstringr las funciones una tras otra, simplemente esperar la función que devuelve la Promesa. Pero la función asíncrona debe declararse antes de esperar que una función devuelva una Promesa. El código ahora se ve como a continuación.
Ejemplo: después de async/await
async function fun1(req, res){ let response = await request.get('http://localhost:3000'); if (response.err) { console.log('error');} else { console.log('fetched response'); }
Explicación:
el código anterior básicamente le pide al motor de javascript que ejecuta el código que espere a que se complete la función request.get() antes de pasar a la siguiente línea para ejecutarla. La función request.get() devuelve una Promesa por la cual el usuario esperará . Antes de async/await, si es necesario asegurarse de que las funciones se ejecutan en la secuencia deseada, es decir, una tras otra, enstringrlas una tras otra o registrar devoluciones de llamada.
La escritura y la comprensión del código se vuelven fáciles con async/await, como se puede observar en ambos ejemplos.
Publicación traducida automáticamente
Artículo escrito por Parikshit Hooda y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA