Node.js Promise Tutorial

En tutoriales anteriores, habría visto funciones de devolución de llamada que se utilizan para eventos asincrónicos. Pero a veces las funciones de devolución de llamada pueden convertirse en una pesadilla cuando comienzan a anidarse, y el programa comienza a ser largo y complejo.

En este tutorial, usted aprenderá –

¿Qué son las promesas?

Antes de comenzar con promesas, primero reexaminemos cuáles son las funciones de “devolución de llamada” en Node.js. Hemos visto estas funciones de devolución de llamada mucho en los capítulos anteriores, así que vamos a pasar rápidamente a través de una de ellas.

El siguiente ejemplo muestra un fragmento de código, que se utiliza para conectarse a una base de datos MongoDB y realizar una operación de actualización en uno de los registros de la base de dat

  1. En el código anterior, la parte de la función (err, db) se conoce como la declaración de una función anónima o de devolución de llamada. Cuando MongoClient crea una conexión a la base de datos MongoDB, volverá a la función de devolución de llamada una vez que se complete la operación de conexión. Entonces, en cierto sentido, las operaciones de conexión ocurren en segundo plano, y cuando se hace, llama a nuestra función de devolución de llamada. Recuerde que este es uno de los puntos clave de Node.js para permitir que muchas operaciones ocurran simultáneamente y, por lo tanto, no bloquear a ningún usuario realizar una operación.
  2. El segundo bloque de código es lo que se ejecuta cuando se llama realmente a la función de devolución de llamada. La función de devolución de llamada solo actualiza un registro en nuestra base de datos MongoDB.

Entonces, ¿qué es una promesa? Bueno, una promesa es solo una mejora de las funciones de devolución de llamada en Node.js. Durante el ciclo de vida de desarrollo, puede haber una instancia en la que necesitaría anidar varias funciones de devolución de llamada juntas. Esto puede ser un poco desordenado y difícil de mantener en un cierto momento en el tiempo. En resumen, una promesa es una mejora de las devoluciones de llamada que busca aliviar estos problemas.

La sintaxis básica de una promesa se muestra a continuación;

  • “doSomethingayNC” es cualquier devolución de llamada o función asíncrona que hace algún tipo de procesamiento.
  • Esta vez, al definir la devolución de llamada, hay un valor que se devuelve llamado una “promesa”.
  • Cuando se devuelve una promesa, puede tener 2 salidas. Esto se define por la ‘cláusula de entonces’. O bien la operación puede ser un éxito que se denota por el parámetro ‘onFulfilled’. O puede tener un error que se denota por el parámetro ‘onRejected’

Nota: Entonces, el aspecto clave de una promesa es el valor devuelto. No existe el concepto de un valor de retorno cuando se trabaja con devoluciones de llamada normales en Node.js. Debido al valor de retorno, tenemos más control de cómo se puede definir la función de devolución de llamada.

En el siguiente tema, veremos un ejemplo de promesas y cómo se benefician de las devoluciones de llamada.

Devolución de llamada a promesas

Ahora veamos un ejemplo de cómo podemos usar “promesas” desde una aplicación Node.js. Para usar promesas en una aplicación Node.js, primero debe descargarse e instalarse el módulo ‘promise’.

A continuación, modificaremos nuestro código como se muestra a continuación, que actualiza un Employeename en la colección ‘Employee’ mediante el uso de promesas.

Paso 1) Instalación de los módulos NPM

Para usar Promises desde una aplicación Node JS, se requiere el módulo promise. Para instalar el módulo promise, ejecute el siguiente comando

npm install promise

Paso 2) Modificar el código para incluir promesas

Explicación del código: –

  1. La primera parte es incluir el módulo ‘promise’ que nos permitirá usar la funcionalidad promise en nuestro código.
  2. Ahora podemos añadir la función ‘then’ a nuestra función MongoClient.connect. Entonces, lo que esto hace es que cuando se establece la conexión a la base de datos, necesitamos ejecutar el fragmento de código definido a partir de entonces.
  3. Finalmente, definimos nuestro fragmento de código que hace el trabajo de actualizar EmployeeName del empleado con el nombre de “Martin” a “Mohan”.

Nota:

Si ahora comprueba el contenido de su base de datos MongoDB, encontrará que si existe un registro con EmployeeName de “Martin”, se actualizará a “Mohan”.

Para comprobar que los datos se han insertado correctamente en la base de datos, debe ejecutar los siguientes comandos en MongoDB

1. Usar empleadob
2. db.Employee.find ({EmployeeName:Mohan})

La primera instrucción garantiza que está conectado a la base de datos EmployeeDB. La segunda declaración busca el registro que tiene el nombre del empleado de “Mohan”.

Tratar con promesas anidadas

Al definir promesas, debe tenerse en cuenta que el método “entonces” en sí devuelve una promesa. Entonces, en cierto sentido, las promesas pueden anidarse o encadenarse entre sí.

En el ejemplo siguiente, usamos encadenamiento para definir 2 funciones de devolución de llamada, las cuales insertan un registro en la base de datos MongoDB.

(Nota: El encadenamiento es un concepto utilizado para vincular la ejecución de métodos entre sí. Supongamos que su aplicación tenía 2 métodos llamados ‘Methoda’ y ‘MethodB’. Y la lógica era tal que ‘methodB’ debería llamarse después de ‘methoda, ‘entonces encadenaría la ejecución de tal manera que’ methodB ‘se llame directamente después de’ methoda ‘.)

Lo clave a tener en cuenta en este ejemplo es que el código se vuelve más limpio, legible y mantenible mediante el uso de promesas anidadas.

Explicación del código: –

  1. Ahora estamos definiendo 2 cláusulas “entonces” que se ejecutan una tras otra. En la primera cláusula entonces, estamos pasando el parámetro ‘db’ que contiene nuestra conexión a la base de datos. A continuación, estamos utilizando la propiedad de colección de la conexión ‘db’ para insertar registros en la colección ‘Employee’. El método ‘InsertOne’ se utiliza para insertar el documento real en la colección Employee.
  2. A continuación, estamos utilizando la segunda cláusula entonces también para insertar otro registro en la base de datos.

Si ahora comprueba el contenido de su base de datos MongoDB, encontrará los 2 registros insertados en la base de datos MongoDB.

Crear una promesa personalizada

Se puede crear una promesa personalizada mediante el uso de un módulo de nodo llamado ‘q.’ La biblioteca ‘q’ necesita ser descargada e instalada usando el administrador de paquetes de nodos. Después de usar la biblioteca ‘q’, se puede llamar al método “denodeify” que hará que cualquier función se convierta en una función que devuelve una promesa.

En el siguiente ejemplo, vamos a crear una función simple llamada “Add” que agregará 2 números. Vamos a convertir esta función en una función para devolver una promesa.

Una vez hecho esto, usaremos la promesa devuelta por la función Add para mostrar un mensaje en el console.log.

Vamos a seguir los siguientes pasos para crear nuestra función personalizada para devolver una promesa.

Paso 1) Instalación de los módulos NPM
Para usar ‘q’ desde una aplicación Node JS, se requiere el módulo ‘q’. Para instalar el módulo ‘q’, ejecute el siguiente comando

npm install q

Paso 2) Defina el siguiente código que se utilizará para crear la promesa personalizada.

Explicación del código: –

  1. El primer bit es incluir la biblioteca ‘q’ mediante el uso de la palabra clave require. Mediante el uso de esta biblioteca, vamos a ser capaces de definir cualquier función para devolver una devolución de llamada.
  2. Estamos creando una función llamada Add que agregará 2 números definidos en las variables a y b. La suma de estos valores se almacenará en la variable c.
  3. A continuación, estamos utilizando la biblioteca q para denodeificar (el método utilizado para convertir cualquier función en una función que devolvería una promesa) nuestra función Add o en otra forma convertir nuestra función Add a una función que devuelve una promesa.
  4. Ahora llamamos a nuestra función “Add” y podemos obtener un valor de promesa de retorno debido al paso anterior que realizamos de desnodeificar la función Add.
  5. La palabra clave ‘then’ se utiliza especificar que si la función se ejecuta correctamente entonces mostrar la cadena “Función de adición completada” en el console.log.

Cuando se ejecuta el código anterior, la salida “Función de adición completada” se mostrará en el console.log como se muestra a continuación.

Resumen

  • Usar funciones de devolución de llamada en Node.js tiene sus desventajas. A veces, durante el proceso de desarrollo, el uso anidado de funciones de devolución de llamada puede hacer que el código sea más complicado y difícil de mantener.
  • La mayoría de los problemas con las funciones de devolución de llamada anidadas se pueden mitigar con el uso de promesas y generadores en node.js
  • Una promesa es un valor devuelto por una función asíncrona para indicar la finalización del procesamiento llevado a cabo por la función asíncrona.
  • Las promesas se pueden anidar entre sí para hacer que el código se vea mejor y más fácil de mantener cuando una función asíncrona necesita ser llamada después de otra función asíncrona
0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *