‫Instructor: ¡Bienvenido de nuevo!
‫En este video, vamos a leer archivos y
‫escribir dos archivos como antes, pero en cambio de forma asincrónica.
‫Agreguemos algunos comentarios aquí antes.
‫Entonces, esta
‫es la forma bloqueante, sincrónica, y luego, haremos un
‫ejercicio de forma no bloqueante, asincrónica.
‫Entonces, no vamos a
‫hacer lo mismo, solo vamos
‫a inventar otro tipo de ejercicio loco aquí.
‫Entonces, para leer un archivo de forma
‫asincrónica, funciona así.
‫Nuevamente, necesitamos el módulo FS, y luego leer el archivo, pero esta vez, no
‫leer la sincronización del archivo, por supuesto.
‫Y, nuevamente, pasamos el nombre del archivo, o la ruta
‫al archivo en realidad, y
‫nuevamente, es txt, y el archivo que quiero
‫ahora se llama inicio. txt,
‫entonces este.
‫Ups, perdón por eso.
‫Entonces, este es el archivo que quiero, en la tarea lee esto, y
‫te explicaré por qué un poco más tarde.
‫Por ahora, no se preocupe por el contenido aquí.
‫Entonces, en el
‫archivo leído, en realidad no tenemos que especificar la codificación del archivo, está bien.
‫Y así, el siguiente
‫parámetro, el segundo será una función de devolución de llamada, y
‫eso es lo que aprendimos en la última lección.
‫Entonces, Node JS se basa en devoluciones
‫de llamada para implementar un comportamiento asincrónico, y así
‫es como funciona.
‫Entonces, Node comenzará a leer este archivo
‫aquí en segundo plano, y tan pronto como esté
‫listo, iniciará la función de devolución de llamada que especificamos aquí.
‫De acuerdo, y llama a esta función de devolución
‫de llamada con dos argumentos.
‫El primero es el error
‫y el segundo son los datos reales, ¿de acuerdo?
‫Entonces, este primer estilo de devolución de llamada de error
‫es muy típico en Node JS, está bien.
‫Entonces, muchas, muchas veces, el primer parámetro
‫en una devolución de llamada será el error, en caso
‫de que haya alguno, y el segundo serán los datos en sí.
‫Lo que importa
‫aquí es que el error suele ser siempre el primero, ¿de acuerdo?
‫Entonces, solo para probarlo por ahora,
‫simplemente iniciemos sesión a través de la consola, los datos.
‫Entonces, ahora probemos eso.
‫Pero, antes de
‫hacer esto, sigamos especificando la codificación de archivo aquí, ¿de acuerdo?
‫Entonces, no estoy cien por ciento
‫seguro de que funcione
‫sin esto, así que limpie esto ahora, ejecútelo nuevamente, y aquí vemos leer esto.
‫Entonces, analicemos, nuevamente, lo que sucedió aquí.
‫Tan pronto como se ejecute esta función, comenzará
‫a leer este archivo en segundo plano sin bloquear
‫el resto de la ejecución del código.
‫Entonces, permítanme demostrar esto aquí.
‫Entonces, una consola. log
‫leerá el archivo, y para tener un poco menos de
‫confusión, permítanme comentar esta parte aquí, está bien.
‫Entonces, ¿qué crees que pasará ahora?
‫¿Qué registro vamos a ver primero?
‫Y, de hecho, primero vemos will
‫read file y, solo entonces, vemos leer esto.
‫Entonces, nuevamente, ¿por qué sucedió eso?
‫Entonces, como mencioné, Node JS comenzará a leer el
‫archivo en segundo plano aquí, y no bloqueará
‫el código, y luego pasará inmediatamente a la siguiente línea de código.
‫Y, la siguiente línea de código, bueno, es este registro aquí,
‫y eso es lo primero
‫que se registrará aquí en la terminal.
‫Solo entonces, cuando un archivo se lea por
‫completo, esta función de devolución de llamada se ejecutará, ¿de acuerdo?
‫Y nuevamente, esta función de devolución de llamada tiene acceso al error y
‫a los datos que se leyeron,
‫y realmente podríamos llamar a esto aquí como queramos.
‫También podríamos llamarlo texto, realmente no importa, todo lo que
‫importa es que es el segundo argumento en esta función
‫de devolución de llamada.
‫De hecho, volvamos a los
‫datos porque me gusta más esa forma.
‫Y así, solo entonces, esta consola. log se ejecutará con los datos, es
‫decir, con el texto que estaba en el archivo.
‫Entonces, es por eso que vemos esto aquí como el segundo registro.
‫Muy bien, ahora para ir más
‫allá, hagamos otro archivo de lectura, pero en lugar de esto,
‫para que pueda mostrarles que básicamente podemos
‫hacer varios pasos, uno tras otro, con devoluciones de llamada.
‫Entonces, pasos que dependen del resultado del paso anterior.
‫Bien, es por eso que en realidad en el archivo de inicio,
‫he leído
‫esto porque luego hay un archivo llamado leer esto,
‫que tiene el contenido que realmente nos interesa.
‫¿Okey?
‫Entonces, lo que voy a hacer aquí es copiar
‫este código y ponerlo aquí.
‫Llamaré a este dato uno, y luego dato dos,
‫y el resultado del segundo paso, por lo que la lectura del
‫segundo archivo dependerá del primero.
‫Eso es porque usaremos los datos para el nombre del archivo, ¿recuerdas?
‫Entonces, aquí estamos haciendo un (murmullos) ahora
‫porque necesitamos poner esa variable, y se llama datos
‫uno.
‫Vale, ¿tiene sentido?
‫Entonces, el dato uno se leerá esto, está bien, y luego, en el
‫siguiente paso, leemos txt / readthis. txt, que es
‫entonces este.
‫De acuerdo, y es por eso que este nombre de archivo aquí
‫es el mismo que este contenido.
‫Y así, eso se registra a través de los datos de la consola.
‫Y, probemos rápidamente si esto funciona, y de hecho,
‫ese es el contenido de leer esto. TXT.
‫Y ahora voy a ir un paso más allá,
‫incluso porque hay otro texto en este archivo adjunto que quiero
‫agregar a esta primera cadena, por lo que hay texto
‫que proviene del otro archivo.
‫Entonces, tenemos otro paso que
‫depende del paso anterior, así que lo
‫que voy a hacer es agregar otro archivo de lectura aquí.
‫Así que, así.
‫Entonces, este se
‫llama adjuntar, y voy a llamar a este datos tres, datos tres aquí,
‫y eso es, nuevamente, ejecutar eso.
‫Y, está bien, ahora tenemos estos dos resultados aquí.
‫Muy bien, y ahora finalmente, como último paso,
‫quiero escribir estas dos cadenas juntas en
‫un archivo, ¿de acuerdo?
‫Hasta ahora, solo hemos
‫leído archivos, pero yo también quiero escribir
‫un archivo, así que hagámoslo aquí también.
‫Entonces, fs.
‫writeFile, y por supuesto, no estamos usando el sincrónico
‫como lo hicimos
‫antes, pero nuevamente usamos, al igual que aquí y aquí
‫y aquí, usamos la versión asincrónica, no la sincrónica.
‫Entonces, txt slash, falta este aquí,
‫final.
‫Luego, deberíamos agregar la codificación de mensajes de texto aquí también, y
‫luego esta también acepta una función de devolución de llamada, pero
‫en este caso no hay datos que leemos, por
‫lo que no necesitamos dos argumentos.
‫Entonces, el único argumento que tenemos es el error, en realidad.
‫Bien, aquí tenemos el error y los datos que se leyeron,
‫pero aquí en writeFile, no hay datos.
‫Todo lo que hay, o puede haber, es un error, ¿de acuerdo?
‫Y de hecho, nos
‫falta algo aquí, que es lo que realmente queremos escribir en el archivo.
‫Bien, y ese es el segundo
‫argumento, y lo que es, son los datos dos y los datos tres.
‫Entonces, nuevamente una cadena
‫(murmura) aquí, datos dos,
‫luego un carácter de nueva línea, que nuevamente, es barra
‫invertida n, y luego datos 3.
‫Muy bien, y así, al igual que con las funciones de lectura de archivos, esta devolución de
‫llamada es lo que se ejecuta al final, así que lo que voy a
‫hacer aquí es simplemente registrar a través de la consola que
‫los archivos se han escrito o que
‫el archivo tiene sido escrito.
‫Su archivo ha sido escrito, y usemos algunos emoji
‫divertidos aquí, solo para hacer que la
‫consola sea un poco más
‫brillante para nosotros, y creo que deberíamos hacerlo así.
‫Entonces, limpiemos la consola una vez más, ejecútela
‫y, de hecho, vemos que su archivo ha sido escrito.
‫Entonces, ¿realmente lo ha hecho?
‫Final.
‫Oh, sí, aquí está.
‫Entonces, esa es la lectura de este texto
‫y el texto adjunto, ambos juntos, ambos en el mismo archivo.
‫Bien, así es como realizamos varios pasos en los pedidos, utilizando
‫funciones de devolución de llamada, ¿verdad?
‫Porque imagina que simplemente hiciste la misma lectura de archivo, y luego la
‫lectura del segundo archivo, así que este,
‫justo después de eso.
‫Bueno, entonces, ¿cómo obtendrías acceso a
‫los datos del primero, verdad?
‫Y así es como surge este patrón.
‫De hecho, tiene su
‫propio nombre, y creo que mencioné que en
‫el último video, es el llamado infierno de
‫devolución de llamada, y hay algunas soluciones para hacer que este código
‫aquí sea más legible y mejor de entender, pero
‫por ahora, eso no es así. importa en absoluto para ti.
‫Lo que importa es que Node JS se basa en
‫esta filosofía de devoluciones de llamada, de modo
‫que así es como Node JS implementa las operaciones asincrónicas, llamando
‫a las devoluciones de llamada tan
‫pronto como finaliza la operación que está haciendo.
‫Y, por cierto, esta forma de escribir la función que
‫ves aquí, nuevamente, en caso de
‫que no estés familiarizado
‫con ella, también es la nueva sintaxis de ES6, ¿de acuerdo?
‫Entonces, nuevamente, espero que esté familiarizado con
‫ES6 en este punto, y
‫para que todo esto tenga mucho sentido para usted.
‫Si escribiera esta función aquí
‫sin la sintaxis de la función de
‫error, lo haríamos simplemente así, función, err, dato uno, y
‫luego así.
‫Entonces, esa es una
‫función normal, digamos una función pasada
‫de moda, y la nueva versión funciona así.
‫La diferencia entre ellos es principalmente la sintaxis, pero también el hecho de
‫que una función de error, por lo que este tipo
‫de función, no obtiene
‫su propia palabra clave de disco, por lo
‫que usa la palabra clave de disco de la función principal.
‫Y eso se llama la palabra clave léxica de disco,
‫mientras que una función normal como esta
‫siempre obtiene su propia palabra clave de disco, ¿verdad?
‫Estoy seguro de que está familiarizado con ese tipo de
‫cosas, pero solo haga una pequeña revisión aquí en caso de que no lo esté.
‫Está bien, espero que se haya hecho desde entonces.
‫En realidad, nunca usamos este error, no manejamos
‫ningún error, así que,
‫por ejemplo, imagine que este archivo aquí no existe.
‫Bueno, podríamos haber usado este error,
‫y de hecho hagámoslo, pero solo para este aquí, así que
‫no quiero crear todos estos controladores de errores aquí, pero solo en esta
‫situación, digamos que hubo un error, y así digamos
‫si hay un error, el retorno
‫de esta función, así que no haga nada
‫más, e inicie
‫sesión en la consola, error, y luego podemos agregar algún otro emoji
‫aquí, como esta explosión, así que algo explotó aquí.
‫Entonces, cambiemos esto aquí, como comenzar. txt, ejecute esto nuevamente, y entonces,
‫tenemos este
‫error ahora, por lo que nos da este registro a
‫la consola, y como regresamos, no hará
‫nada después de eso, por lo que todo esto
‫básicamente se ignora y no se ejecutará , que es
‫exactamente lo que queremos.
‫Bien, pero si lo ponemos de nuevo a la
‫normalidad y luego
‫lo ejecutamos de nuevo, entonces todo funciona como antes.
‫Entonces, acostúmbrese a este patrón de devoluciones de llamada porque
‫lo verá por todas partes en Node JS
‫y en toda esta sección.