Patrones asíncronos en Node.js

Dado que el Node es un lenguaje que se ejecuta en un solo subproceso que a su vez utiliza varios subprocesos en segundo plano. Un código en node.js no debe bloquear porque si una línea de código en particular, por ejemplo: Leer un documento grande puede detener la ejecución de todas las líneas de código que se encuentran por delante, lo cual no es una buena práctica.
Es por eso que implementar una funcionalidad que podría tomar algún tiempo, se está haciendo de forma asíncrona, lo que saca la ejecución de esa parte en particular del ciclo del evento principal y el programa se ejecuta normalmente.

Hay tres patrones de asincrónico:

  1. devoluciones de llamada
  2. promesas
  3. Async-espera

1. Devoluciones de llamada: una función de devolución de llamada es una función que se pasa a otra función como un argumento, que luego se invoca dentro de la función externa para completar algún tipo de rutina o acción.

Esta función se llama cuando se completa la operación asincrónica. Principalmente, el cuerpo de la función de devolución de llamada contiene la operación asincrónica.

La forma más común es la devolución de llamada «error primero» en la que si la función principal y toma el parámetro de error, si hay un error, ejecuta la parte del error; de lo contrario, ejecuta la otra parte.

Nombre de archivo: index.js 

javascript

arr = ["Geeks", "Geeks", "pop", "Geeks"]
console.log("calling")
 
var value = arr.filter(function(element) {
     if(element != "pop")
     return element
});
 
console.log("called")
console.log(value)

Ejecute el archivo index.js con el siguiente comando:  

node index.js

Producción: 

calling
called
[ 'Geeks', 'Geeks', 'Geeks' ]

Generalmente, las devoluciones de llamada no se usan porque todo el código después de una operación asíncrona está anidado dentro de una función. Más operaciones asíncronas significan más sangría, lo que en última instancia da como resultado una falta de lectura y confusión, y el problema se vuelve cada vez más significativo con funciones más grandes. También se le conoce como “Pirámides de la muerte”. 

2. Promesas: una promesa es un proxy de un estado o valor que se desconoce en el momento en que se crea la promesa pero que podría determinarse en un futuro próximo. Esto permite que los métodos asincrónicos devuelvan la promesa de proporcionar valor en algún momento en el futuro.

Sintaxis básica: 

const promise = new Promise(function)

Tienen métodos como:

  • prototipo.luego()
  • prototipo.captura() 

.then() se usa para especificar qué hacer si se cumple la promesa y .catch() especifica qué hacer si no se cumple la promesa.

Nombre de archivo: index.js 

javascript

const multiplication = (numberOne, numberTwo) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
 
            // Checking if any number is negative or not
            if (numberOne < 0 || numberTwo < 0) {
 
              // If everything is not fine
              return reject("Only Positive number allowed")
            } 
 
            // If everything is fine
            resolve(numberOne * numberTwo)
        }, 1000)
    })
 }
 
 // Call for positive numbers
 multiplication(5, 3).then((product) => {
    console.log("The product is:", product)
 }).catch((error) => {
    console.log(error)
 })
 
// Call for negative numbers
multiplication(5, -3).then((product) => {
  console.log("The product is:", product)
}).catch((error) => {
  console.log(error)
})

Ejecute el archivo index.js con el siguiente comando:  

node index.js

Producción:  

The product is: 15
Only Positive number allowed

3. Async-await: es un método en el que la función principal se declara con la palabra clave async y dentro de ella se permite la palabra clave await. La palabra clave async y await habilita un comportamiento asincrónico basado en promesas para que el código se pueda escribir mucho más limpio y evitar las strings de promesas.
Sintaxis básica: 

async function name(params) {
  const result = await waitforfunction()
} 

Las funciones asíncronas pueden contener más de una expresión de espera. Esta palabra clave await se usa para esperar a que la promesa se cumpla o se rechace.

Nombre de archivo: index.js 

javascript

function resolvelater() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('GeeksforGeeks');
    }, 2000);
  });
}
 
async function waitforGeeksforGeeks() {
  console.log('calling');
  const result = await resolvelater();
  console.log(result);
}
 
waitforGeeksforGeeks()

Ejecute el archivo index.js con el siguiente comando:  

node index.js

Producción: 

calling
GeeksforGeeks

Publicación traducida automáticamente

Artículo escrito por shivanshsaxena1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *