‫Instructor: Empecemos ahora a aprender cómo
‫resolver el infierno de las devoluciones de llamada mediante el uso de promesas.
‫Y comenzaremos usando una promesa para la solicitud
‫de aparición del agente en
‫lugar de la devolución de llamada.
‫Y esto funcionará porque la biblioteca de súper agentes
‫tiene soporte para promesas listas para usar, por lo
‫que simplemente podemos usarlas aquí.
‫Para las funciones de nodo, que provienen de paquetes de nodos internos
‫como Read File, en realidad tendremos que construir la promesa
‫nosotros mismos, y lo haremos más adelante en la próxima lección, más
‫o menos.
‫Pero por
‫ahora, quiero que aprendas cómo consumir promesas
‫y solo más tarde cómo construirlas.
‫Bien, de nuevo vamos a empezar
‫con la biblioteca de
‫súper agentes y más específicamente con el método get aquí.
‫Porque este método aquí realmente devuelve una promesa.
‫Entonces, sin entrar en demasiados detalles, por ahora, una
‫promesa básicamente implementa el
‫concepto de un valor futuro.
‫Básicamente, es un valor que esperamos recibir en algún momento
‫en el futuro, por lo que
‫es un poco como si dijéramos "Oye, servidor" o
‫"Oye, API, por favor, consígueme una imagen de perro aleatoria" en segundo
‫plano y deja sé cuándo estás listo "y
‫luego devuélveme esos datos. " ¿Okey?
‫Entonces, esa imagen aleatoria es el valor
‫que esperamos en el futuro.
‫Y ese es exactamente el tipo de solicitud
‫que estamos haciendo usando una biblioteca de súper agentes
‫en este ejemplo.
‫Derecha.
‫Y el método de obtención que usamos nuevamente
‫devolverá una promesa automática e inmediatamente tan pronto como iniciemos
‫la solicitud.
‫Entonces, la promesa aún no tiene valor,
‫porque el servidor en realidad todavía está obteniendo
‫los datos del servidor de forma asincrónica en segundo
‫plano, pero la promesa está disponible de
‫inmediato y básicamente nos promete que obtendrá algunos datos en
‫el futuro.
‫Vale, ¿eso tiene sentido?
‫Y ese estado de la promesa en ese caso,
‫tan justo al principio, es una promesa pendiente.
‫Así que todavía está pendiente, todavía
‫no ha vuelto con ningún dato, ¿de acuerdo?
‫Así que aquí, en este punto, ya tenemos una promesa
‫con la que podemos trabajar.
‫Ahora todo lo que tenemos que hacer es consumirlo,
‫lo que básicamente significa que esperamos a que regrese
‫con los datos.
‫Y para hacer eso, usamos el método then.
‫Entonces, todo lo que hacemos es usar entonces y luego
‫aquí, pasamos una función de devolución de llamada.
‫Esta función de devolución de llamada se llamará tan
‫pronto como la promesa haya terminado de hacer su trabajo y haya regresado
‫con los datos.
‫Y esos datos están disponibles como argumento para esa
‫devolución de llamada.
‫Ahora me gusta llamar a eso el resultado.
‫Y así, nuevamente en esa función de devolución de llamada
‫que tenemos aquí, tenemos esos datos disponibles.
‫Así que tomemos todo esto aquí y pongámoslo en
‫esta función de devolución de llamada y, de
‫hecho, eliminemos esto.
‫Así que ya no necesitamos
‫eso, y salvamos.
‫Ahora podría estar pensando, bueno, todavía estamos
‫usando devoluciones de llamada aquí, y sí, eso es realmente cierto.
‫Por lo tanto, esto no parece un gran cambio por
‫ahora, pero después de que transformemos todo el
‫ejemplo aquí en
‫promesas, verá el gran impacto que las promesas tendrán en nuestro código.
‫Básicamente, si tenemos varias promesas, podremos encadenar estas
‫devoluciones de llamada entre sí en lugar
‫de anidarlas.
‫Lo que ya es una gran mejora.
‫Ahora bien, una cosa que olvidé mencionar
‫antes es que una promesa tan pronto como regrese con los
‫datos se llama promesa resuelta.
‫Entonces, al principio es una promesa pendiente
‫y cuando obtiene los datos
‫con éxito, entonces es una promesa resuelta.
‫Sin embargo, es posible que una promesa resuelta no siempre
‫tenga éxito porque podría haber habido un error.
‫Entonces decimos que una promesa resuelta puede
‫cumplirse o rechazarse.
‫La promesa cumplida en realidad tiene un resultado que
‫queremos utilizar.
‫Mientras que una promesa rechazada es cuando hubo un error.
‫Así que recuerde la situación que tuvimos
‫antes en la que teníamos una raza de perro equivocada.
‫Entonces, en ese caso,
‫tuvimos un error y manejamos ese error usando este código aquí.
‫Bueno.
‫Ahora bien, el problema con este método
‫entonces aquí es que en realidad solo maneja las promesas
‫cumplidas, pero no hace nada si hubo un
‫error, porque para eso, en realidad tenemos otro método.
‫Entonces, otro mecanismo para manejar eso.
‫Y ese es el método de captura.
‫Entonces, justo después del método then,
‫podemos encadenar otro método que se llama catch.
‫Bueno.
‫Y este será llamado si hubo un error.
‫Entonces aquí, de hecho, tenemos acceso a ese objeto de error.
‫Y ahora sigamos adelante, tomemos
‫este fragmento de código y
‫colóquelo
‫aquí, y ahora podemos deshacernos de esto.
‫Porque en realidad en este método,
‫no tenemos información si hubo
‫un error o no porque solo se llama
‫en caso de que la promesa sea exitosa.
‫Entonces, si es una promesa cumplida.
‫Bien, es bueno separar estos dos
‫casos automáticamente para nosotros.
‫Entonces, en lugar de tener ese manejo
‫extraño que
‫teníamos antes, simplemente podemos escribir toda la lógica para el caso
‫exitoso, que es el
‫más habitual porque generalmente esperamos que todo funcione
‫bien, pero en caso de que haya un
‫error, podemos ingresar alguna otra lógica aquí abajo en este controlador de errores aquí.
‫Así que lo mantenemos bien separado.
‫Cambiémoslo aquí de nuevo.
‫Dale a este otro guardado para ejecutarlo nuevamente.
‫Y aquí tenemos No encontrado, y
‫entonces puede ver que en realidad ingresó este método de captura aquí
‫y no hizo ninguna de
‫las cosas que están en este método.
‫Ahora adelante, arregle esto aquí, ciérrelo,
‫guarde
‫este y
‫aquí vamos.
‫Así es como consumimos las promesas.
‫Así que comenzamos con este método aquí que
‫devolvió una promesa y así sucesivamente,
‫podemos encadenar el método
‫then que maneja básicamente el caso exitoso,
‫y luego, al final, también encadenamos el método
‫catch que maneja lo fallido, por lo que el rechazado, promesa.
‫Pero como dije antes, esto todavía se ve
‫como antes.
‫¿Derecha?
‫Así que todavía tenemos esta función de devolución de llamada aquí,
‫así que toda esta función de devolución
‫de llamada y también aquí dentro de nuestro método then, tenemos esta función
‫de devolución de llamada del writeFile.
‫Así que sigamos adelante y arreglemos eso en el siguiente video.