El infierno de devolución de llamada en Node.js es la situación en la que tenemos devoluciones de llamada anidadas complejas. En esto, cada devolución de llamada toma argumentos que se han obtenido como resultado de devoluciones de llamada anteriores. Este tipo de estructura de devolución de llamada conduce a una menor legibilidad y mantenimiento del código.
Podemos evitar el infierno de devolución de llamada con la ayuda de Promises . Las promesas en javascript son una forma de manejar operaciones asincrónicas en Node.js. Nos permite devolver un valor de una función asíncrona como las funciones síncronas. Cuando devolvemos algo de un método asíncrono, devuelve una promesa que se puede usar para consumir el valor final cuando esté disponible en el futuro con la ayuda del método then() o espera dentro de las funciones asíncronas. La sintaxis para crear una promesa se menciona a continuación.
const promise = new Promise(function(resolve, reject){ // code logic });
Ejemplo: en el ejemplo de código que se menciona a continuación, simulamos una operación de adición asíncrona con la ayuda de setTimeout() .
- Primero, creamos una función add() que toma tres argumentos en los que dos son los números que queremos agregar y el tercero es la función de devolución de llamada que se llama con el resultado de las operaciones de suma después de 2 segundos. Luego, calculamos el resultado de la suma de los primeros cuatro números naturales utilizando una devolución de llamada anidada para simular un infierno de devolución de llamada.
- Después de eso, creamos una función addPromise() que devuelve una promesa y esta promesa se resuelve después de dos segundos de llamar a la función. Luego consumimos la promesa usando el método then() y async/await.
Javascript
// The callback function for function // is executed after two seconds with // the result of addition const add = function (a, b, callback) { setTimeout(() => { callback(a + b); }, 2000); }; // Using nested callbacks to calculate // the sum of first four natural numbers. add(1, 2, (sum1) => { add(3, sum1, (sum2) => { add(4, sum2, (sum3) => { console.log(`Sum of first 4 natural numbers using callback is ${sum3}`); }); }); }); // This function returns a promise // that will later be consumed to get // the result of addition const addPromise = function (a, b) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(a + b); }, 2000); }); }; // Consuming promises with the chaining of then() // method and calculating the result addPromise(1, 2) .then((sum1) => { return addPromise(3, sum1); }) .then((sum2) => { return addPromise(4, sum2); }) .then((sum3) => { console.log( `Sum of first 4 natural numbers using promise and then() is ${sum3}` ); }); // Calculation the result of addition by // consuming the promise using async/await (async () => { const sum1 = await addPromise(1, 2); const sum2 = await addPromise(3, sum1); const sum3 = await addPromise(4, sum2); console.log( `Sum of first 4 natural numbers using promise and async/await is ${sum3}` ); })();
Producción:
Publicación traducida automáticamente
Artículo escrito por shivamsingh00141 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA