Acabamos de aprender sobre Callback Hell y
cómo las promesas pueden permitirnos superar este problema.
Sabemos que el controlador de nodo MongoDB admite promesas de forma nativa.
Por lo tanto, si no especifica una devolución de llamada,
las llamadas a sus funciones devolverán promesas.
Por lo tanto, vamos a actualizar nuestra aplicación para hacer uso de promesas para
evitar el problema del infierno de devolución de llamada que acabamos de aprender en la conferencia anterior.
Volviendo a nuestra aplicación,
nuevamente echando un vistazo a la razón por la que el infierno de devolución de llamada se ha desarrollado en nuestro código.
Tenga en cuenta que aquí cuando
implementamos las operaciones, tenemos una operación y luego dentro de la devolución de llamada de esa operación,
entonces necesitamos iniciar la siguiente operación y dentro de
la devolución de llamada de esa operación estamos iniciando la siguiente operación y así sucesivamente.
Así que estás terminando con esta pirámide como estructura aquí.
Una operación dentro de la devolución de llamada de otra y dentro de la devolución de llamada.
Ahora, este código pronto será difícil de manejar y complicado de entender.
Es por eso que queremos transformar este código usando
el soporte prometido que Mongo DB Driver ya
nos proporciona para que podamos usar promesas en lugar de
usar las funciones de devolución de llamada como hicimos en este ejercicio.
Por supuesto, hice la versión anterior solo para ilustrarte cómo podemos
aterrizar con el infierno de devolución de llamada y cómo podemos usar promesas para superar este problema.
Entonces, antes de actualizar el archivo index.js,
permítanme entrar en el archivo operations.jsfile y luego actualizaremos esto primero.
Así que aquí, notará que cuando llamemos a esta función aquí,
estamos pasando el segundo parámetro que es una función de devolución de llamada aquí.
Entonces, porque vamos a usar promesas aquí.
Así que solo voy a eliminar esa función de devolución de llamada y luego
dado que esta llamada a la inserción de todos modos devolverá promesas,
solo voy a devolver la promesa de esta función.
Así que tenga en cuenta cómo se simplificó el código.
Del mismo modo, para el segundo,
simplemente eliminaré esta función de devolución de llamada y
luego devolveré la promesa que está
siendo devuelta por esto y luego lo manejaremos en el código en index.js.
Del mismo modo, para la eliminación también,
voy a eliminar la devolución de llamada y luego devolver ese bloqueo y también para uptade.
Para actualizar, vamos a eliminar la devolución de llamada que hemos dado
aquí y luego devolver la promesa.
Así que de esta manera todas estas cuatro funciones van
a devolver la promesa que ya ha sido devuelta
por estas llamadas a las funciones del controlador MongoDB.
Ahora, una vez que hayamos completado eso,
volvamos a index.js.
En index.js, volveré a actualizar esta función aquí.
Entonces, el uso de promesas dirá MongoClient.connect (url) y luego
reemplazaremos esto diciendo «entonces» y esto solo recibe el db como su parámetro.
Y dentro de aquí, vamos a manejar el resto y también podemos
hacer notar que esta función particular cierra el «Entonces» aquí y la promesa,
la segunda parte de la promesa,
podemos manejar el error.
Podemos decir consolelog.
Así que podemos usar la captura de la promesa también para detectar los errores.
Así que de esa manera, hemos detectado los errores.
Ahora, vamos a mejorar el código aquí dentro.
Así que dentro de aquí estamos haciendo el documento de inserción de la operación de base
de datos, y en lugar de llamar a esta función aquí,
lo que voy a hacer es convertir esto en el «entonces» aquí.
Así que voy a cerrar esto y decir.entonces resultado.
Así que dentro de esos resultados,
vamos a imprimir el registro de la consola y luego.
Así que voy a cerrar esto aquí y luego vamos a
cerrar el «entonces» aquí y luego
esto se adjuntará a otra vez un «entonces» aquí.
Así que ves que estoy encadenando dos «entonces»
uno al otro aquí y luego dentro de nosotros luego,
haremos un registro de consola y luego haremos un retorno de la siguiente operación.
Pero luego, para esta operación,
voy a cerrar esto y cerrar esto
entonces y luego esta llamada nuevamente ahora
se manejará dentro de una función de «entonces» aquí.
Así que tenga en cuenta cómo tiene la primera función y en el «entonces» estamos llamando a
los documentos de búsqueda dboper y eso regresará y esto devolverá una promesa.
Esa promesa será manejada por esto entonces.
Así que estamos encadenando dos entonces juntos y luego otra vez encadenando uno más «entonces» aquí.
Permítanme reinventar el código aquí y luego devolveremos esto aquí y
esto de nuevo cerrará y
cerrará ese «entonces» y luego esto se encierra dentro del siguiente «entonces» y
llamaremos a la siguiente función aquí «que
DB.DropCollection ('Platos' y cierre «esto entonces» y la siguiente aquí.
Vamos a manejar el «entonces» del resultado aquí.
Devolver dbclose y todos
estos aquí ahora se pueden eliminar porque ya no son necesarios.
Y luego, finalmente, si hay un error detectará el error esta función.
Así que voy a copiar esto y luego pegarlo aquí. Eso es todo.
Con este cambio ahora,
su código es mucho más fácil de manejar aquí.
Entonces, como puede ver,
tiene MongoClient.connect que
devuelve una promesa y dentro del manejo de esa promesa,
están llamando a estos métodos y uno tras otro están
devolviendo la promesa y luego los está encadenando usando el.
Esta estructura de acordes es mucho más fácil de seguir que lo que habíamos implementado anteriormente.
Así que usando promesas, literalmente lo hemos dado la vuelta y luego evitado
el infierno de devolución de llamada que vimos en la versión anterior de esta aplicación.
Así que vamos a guardar los cambios tanto en
index.jsn.operation.js y luego echar un vistazo a esta aplicación.
De nuevo yendo a la terminal,
en el mensaje escriba «npm
start» y verá que su aplicación se ejecuta exactamente como antes,
inserta el documento, encuentra el documento,
actualiza el documento y luego encuentra
el documento actualizado y luego cierra la base de datos del acto.
Así que usando promesas hemos reestructurado el código para ser mucho más fácil y
evitado el infierno de devolución de llamada que vimos en la versión anterior de esta aplicación.
Con esto, completamos este ejercicio.
En este ejercicio, usted ha visto cómo podemos hacer uso
de las promesas para evitar el infierno de devolución de llamada.
Este es un buen momento para que hagas una confirmación de git con
el mensaje de devolución de llamada infierno y promesa.