‫Instructeur : Bon retour !
‫Dans cette vidéo, nous allons lire des fichiers
‫et écrire deux fichiers comme avant, mais de manière asynchrone.
‫Ajoutons quelques commentaires ici avant.
‫Donc, c'est
‫la manière bloquante, synchrone, et ensuite, nous allons faire
‫un exercice de manière non bloquante, asynchrone.
‫Donc, nous n'allons pas
‫faire la même chose, nous allons
‫juste inventer un autre genre d'exercice fou ici.
‫Donc, pour lire un fichier de manière asynchrone,
‫ça marche comme ça.
‫Encore une fois, nous avons besoin du module FS, puis de lire le fichier, mais cette fois,
‫pas de lire la synchronisation de fichier, bien sûr.
‫Et, encore une fois, nous passons le nom du fichier, ou le chemin
‫d'accès au fichier en fait, et encore
‫une fois, c'est txt, et le fichier que je veux
‫en ce moment s'appelle start. txt,
‫donc celui-ci.
‫Oups, désolé pour ça.
‫Donc, c'est le fichier que je veux, sur la tâche est lu ceci, et
‫je vais vous expliquer pourquoi un peu plus tard.
‫Pour l'instant, ne vous inquiétez pas du contenu ici.
‫Donc, dans
‫le fichier lu, nous n'avons pas besoin de spécifier l'encodage du fichier, d'accord.
‫Et donc, le prochain
‫paramètre, le deuxième sera une fonction de rappel, et c'est ce
‫que nous avons appris dans la dernière leçon.
‫Ainsi, Node JS est entièrement construit autour de
‫rappels afin d'implémenter un comportement asynchrone, et c'est ainsi
‫que cela fonctionne.
‫Ainsi, Node commencera à lire ce
‫fichier ici en arrière-plan, et dès qu'il sera prêt,
‫il lancera la fonction de rappel que nous spécifions ici.
‫D'accord, et il appelle cette fonction de
‫rappel avec deux arguments.
‫Le premier est l'erreur, et
‫le second les données réelles, d'accord ?
‫Donc, ce style de premier rappel d'erreur est
‫très typique dans Node JS, d'accord.
‫Ainsi, de très nombreuses fois, le
‫premier paramètre d'un rappel sera l'erreur, au cas où il
‫y en aurait eu, et le second sera alors les données elles-mêmes.
‫Ce qui compte
‫ici, c'est que l'erreur est généralement toujours la première, d'accord ?
‫Et donc juste pour le
‫tester pour l'instant, connectons simplement via la console, les données.
‫Et donc, testons cela maintenant.
‫Mais, avant de
‫faire cela, spécifions encore le codage de classement ici, d'accord ?
‫Donc, je ne suis pas sûr à
‫cent pour cent que cela
‫fonctionne sans cela, alors nettoyez-le maintenant, exécutez-le à nouveau, et nous voyons ici lire ceci.
‫Alors, analysons, encore une fois, ce qui s'est passé ici.
‫Dès que cette fonction ici est exécutée, elle
‫commencera à lire ce fichier en arrière-plan sans bloquer
‫le reste de l'exécution du code.
‫Alors, permettez-moi de le démontrer ici.
‫Donc, une console. log
‫lira le fichier, et juste pour avoir un peu moins
‫de confusion, laissez-moi commenter cette partie ici, d'accord.
‫Et alors, que pensez-vous qu'il va se passer maintenant?
‫Quel journal allons-nous voir en premier ?
‫Et en effet, nous voyons d'abord lire
‫le fichier, et ensuite seulement, nous voyons lire ceci.
‫Alors, encore une fois, pourquoi est-ce arrivé?
‫Ainsi, comme je l'ai mentionné, Node JS commencera à lire
‫le fichier en arrière-plan ici et ne bloquera
‫pas le code, puis passera immédiatement à la ligne de code suivante.
‫Et, la prochaine ligne de code, eh bien, c'est ce journal ici,
‫et c'est donc la première
‫chose qui sera enregistrée ici dans le terminal.
‫Alors seulement, lorsqu'un fichier est complètement
‫lu, cette fonction de rappel ici s'exécutera, d'accord ?
‫Et encore une fois, cette fonction de rappel a accès à l'erreur et aux
‫données qui ont été lues, et nous
‫pourrions vraiment appeler cela ici tout ce que nous voulions.
‫Nous pourrions aussi l'appeler texte, cela n'a pas vraiment d'importance, tout
‫ce qui compte, c'est que c'est le deuxième argument de
‫cette fonction de rappel.
‫Revenons en fait aux données
‫parce que j'aime mieux cette façon.
‫Et donc, alors seulement, cette console. log fonctionnera avec les données, donc
‫avec le texte qui était dans le fichier.
‫Et donc, c'est pourquoi nous voyons cela ici comme le deuxième journal.
‫Très bien, maintenant pour aller encore plus
‫loin, faisons en fait un autre fichier de lecture, mais au lieu de
‫cela, afin que je puisse vous montrer que nous
‫pouvons essentiellement effectuer plusieurs étapes, l'une après l'autre, avec des rappels.
‫Donc, des étapes qui dépendent du résultat de l'étape précédente.
‫D'accord, c'est pourquoi en fait, dans le fichier de démarrage, j'ai
‫lu ceci
‫car il existe alors un fichier appelé read this,
‫qui contient le contenu qui nous intéresse réellement.
‫D'accord?
‫Donc, ce que je vais faire ici, c'est copier ce
‫code et le mettre ici.
‫Je vais appeler celui-ci les données un, puis les
‫données deux, et le résultat de la deuxième étape, donc le deuxième
‫fichier lu, dépendra du premier.
‫C'est parce que nous utiliserons les données pour le nom du fichier, vous vous souvenez ?
‫Donc, ici, nous faisons un (marmonne) maintenant parce
‫que nous devons mettre cette variable, et elle s'appelle data
‫one.
‫D'accord, ça a du sens ?
‫Donc, les données un seront lues ceci, d'accord, et ainsi, à
‫l'étape suivante, nous lirons txt/readthis. txt, qui est
‫alors ceci.
‫D'accord, et c'est pourquoi ce nom de fichier ici est
‫le même que ce contenu.
‫Et donc, cela est connecté via les données de la console à cela.
‫Et, testons rapidement si cela fonctionne, et en
‫effet, c'est le contenu de lire ceci. SMS.
‫Et maintenant, je vais aller encore plus loin, même parce
‫qu'il y a un autre texte dans ce fichier d'ajout que je
‫veux ajouter à cette première chaîne, donc il y a
‫du texte provenant de l'autre fichier.
‫Et donc, nous avons encore une
‫autre étape qui dépend de l'étape précédente, donc
‫ce que je vais faire est d'ajouter un autre fichier de lecture ici.
‫Alors, juste comme ça.
‫Donc, celui-ci s'appelle append,
‫et je vais appeler celui-ci les données trois, les données trois ici, et c'est
‫donc, encore une fois, exécuter cela.
‫Et, d'accord, nous avons maintenant ces deux résultats ici.
‫Très bien, et maintenant enfin, comme dernière étape,
‫je veux écrire ces deux chaînes ensemble
‫dans un fichier, d'accord ?
‫Jusqu'à présent, nous n'avons lu
‫que des fichiers, mais je veux également
‫écrire un fichier, alors faisons-le ici aussi.
‫Donc, fs.
‫writeFile, et bien sûr, nous n'utilisons pas la version synchrone
‫comme nous le
‫faisions auparavant, mais encore une fois, nous utilisons, comme ici et ici
‫et ici, nous utilisons la version asynchrone, pas la version synchrone.
‫Donc, txt slash, manquant celui-ci ici,
‫final.
‫Ensuite, nous devons également ajouter le codage textuel ici, puis celui-ci
‫accepte également une fonction de rappel, mais dans ce cas,
‫nous ne lisons aucune donnée et nous n'avons donc
‫pas besoin de deux arguments.
‫Donc, le seul argument que nous ayons est l'erreur, en fait.
‫D'accord, nous avons donc ici l'erreur et les données qui ont été lues, mais
‫ici, dans writeFile, il n'y a pas de données.
‫Tout ce qu'il y a, ou peut être, c'est une erreur, d'accord ?
‫Et en fait, il nous
‫manque quelque chose ici, c'est ce que nous voulons réellement écrire dans le fichier.
‫D'accord, et c'est donc le deuxième argument,
‫et ce que c'est, ce sont les données deux et les données trois.
‫Donc, encore une fois une
‫chaîne (marmonne) ici, les données
‫deux, puis un nouveau caractère de ligne, qui est encore une fois
‫la barre oblique inverse n, puis les données 3.
‫Très bien, et ainsi, tout comme avec les fonctions de lecture de fichier, ce rappel est
‫ce qui est exécuté à la fin, donc ce que je vais faire
‫ici est de simplement connecter via la console que les
‫fichiers ont été écrits, ou que
‫le fichier a été écrit.
‫Votre fichier a été écrit, et utilisons simplement des emoji
‫amusants ici, juste pour rendre la console
‫un peu plus lumineuse pour nous,
‫et je pense que nous devrions faire comme ça.
‫Alors, effaçons la console une fois de plus, exécutons-la
‫et nous voyons en effet que votre fichier a été écrit.
‫Alors, vraiment ?
‫Final.
‫Oh, ouais, c'est ici.
‫Il s'agit donc de lire ce texte
‫et d'ajouter du texte, tous deux ensemble, dans le même fichier.
‫D'accord, c'est ainsi que nous effectuons plusieurs étapes dans les commandes, en utilisant
‫des fonctions de rappel, n'est-ce pas ?
‫Car imaginez que vous ayez simplement lu le même fichier,
‫puis le deuxième fichier lu, donc
‫celui-ci, juste après.
‫Eh bien, comment auriez-vous alors accès aux
‫données du premier, n'est-ce pas ?
‫Et c'est ainsi que ce modèle émerge.
‫Il a en
‫fait son propre nom, et je pense
‫avoir mentionné que dans la dernière vidéo, c'est
‫l'enfer appelé callback, et il existe quelques solutions pour rendre ce code
‫ici plus lisible et mieux à comprendre, mais pour
‫l'instant, ce n'est pas le cas. importe du tout pour vous.
‫Ce qui compte, c'est que Node JS est
‫construit autour de cette philosophie de
‫rappels, c'est donc ainsi que Node JS implémente les opérations
‫asynchrones, en appelant des rappels
‫dès que l'opération qu'il effectue est terminée.
‫Et, au fait, cette façon d'écrire la fonction que vous
‫voyez ici, encore une fois, au
‫cas où vous ne
‫la connaîtriez pas, c'est aussi la nouvelle syntaxe ES6, d'accord ?
‫Donc, encore une fois, j'espère que vous êtes
‫familiarisé avec ES6 à ce stade,
‫et pour que tout cela ait un sens pour vous.
‫Si vous deviez écrire cette
‫fonction ici sans la syntaxe de la fonction
‫d'erreur, nous ferions simplement comme ceci, fonction, erreur, donnée un,
‫puis comme ceci.
‫Donc, c'est une
‫fonction normale, disons une fonction à
‫l'ancienne, et la nouvelle version fonctionne comme ça.
‫La différence entre eux est principalement la syntaxe, mais aussi
‫le fait qu'une fonction d'erreur, donc ce type
‫de fonction, n'obtient
‫pas son propre mot-clé disk, elle
‫utilise donc le mot-clé disk de la fonction parent.
‫Et cela s'appelle le mot-clé lexical disk, alors qu'une
‫fonction normale comme celle-ci obtient toujours
‫son propre mot-clé disk, n'est-ce pas ?
‫Je suis sûr que vous êtes familier avec ce genre
‫de choses, mais faites juste une petite critique ici au cas où vous ne le sauriez pas.
‫Bon, j'espère que c'est fait depuis.
‫Nous n'avons en fait jamais utilisé cette erreur, nous
‫n'avons traité aucune erreur,
‫alors, par exemple, imaginez que ce fichier ici n'existait pas.
‫Eh bien, nous aurions pu utiliser
‫cette erreur, et faisons-le, mais juste pour celle-ci ici, donc je
‫ne veux pas créer tous ces gestionnaires d'erreurs ici, mais juste dans cette
‫situation, disons qu'il y a eu une erreur, et
‫ainsi disons si erreur, le retour
‫de cette fonction, alors ne faites rien d'autre,
‫et connectez-vous à
‫la console, erreur, puis nous pouvons ajouter d'autres emoji ici, comme cette
‫explosion, donc comme quelque chose qui a explosé ici.
‫Alors, changeons maintenant cela ici, comme start. txt, exécutez-le à nouveau, et nous
‫avons donc
‫cette erreur maintenant, donc cela nous donne ce journal à la
‫console, et puisque nous sommes revenus, il
‫ne fera rien après cela, donc tout cela est fondamentalement
‫ignoré et ne fonctionnera pas , ce qui est exactement
‫ce que nous voulons.
‫D'accord, mais si nous le remettons à la
‫normale, puis le
‫réexécutons, eh bien, tout fonctionne comme avant.
‫Alors, habituez-vous à ce modèle de rappels car vous
‫le verrez partout dans Node JS et tout
‫au long de cette section.