‫Instructeur : Commençons maintenant à
‫apprendre comment résoudre l'enfer des rappels en utilisant des promesses.
‫Et nous allons commencer par utiliser une promesse
‫pour la demande d'apparition
‫de l'agent au lieu du rappel.
‫Et cela va fonctionner parce que la bibliothèque de super agents
‫prend en charge les promesses prêtes à l'emploi, et nous
‫pouvons donc simplement les utiliser ici.
‫Pour les fonctions de nœud, provenant de packages de nœuds internes comme
‫Read File, nous devrons en fait construire la promesse nous-mêmes,
‫et nous le ferons plus tard dans le prochain cours, ou à
‫peu près.
‫Mais pour
‫l'instant, je veux que vous appreniez à consommer les
‫promesses et seulement plus tard à les construire.
‫Bon, encore une fois, nous allons
‫commencer par la bibliothèque
‫de super agents et plus précisément par la méthode get ici.
‫Parce que cette méthode ici renvoie en fait une promesse.
‫Donc, sans entrer trop dans les détails, pour l'instant,
‫une promesse implémente essentiellement
‫le concept d'une valeur future.
‫Donc, fondamentalement, une valeur que nous nous
‫attendons à recevoir dans
‫le futur, donc c'est un peu
‫comme si nous disions : moi savoir quand
‫vous êtes prêt "et puis rendez-moi
‫ces données. " D'accord?
‫Cette image aléatoire est donc la valeur que
‫nous attendons dans le futur.
‫Et c'est exactement le genre de requête que
‫nous faisons en utilisant une bibliothèque de super agents
‫dans cet exemple.
‫Droit.
‫Et la méthode get que nous utilisons à
‫nouveau renverra automatiquement et immédiatement une promesse dès que nous lançons
‫la requête.
‫La promesse n'a donc pas encore
‫de valeur, car le serveur reçoit toujours les
‫données du serveur de manière asynchrone en arrière-plan,
‫mais la promesse est immédiatement disponible
‫et nous promet essentiellement qu'elle récupérera des données dans
‫le futur.
‫D'accord, est-ce que ça a du sens ?
‫Et cet état de la promesse dans ce cas, donc
‫dès le début, est une promesse en attente.
‫Donc c'est toujours en attente, il
‫n'a toujours pas récupéré de données, d'accord ?
‫Donc ici, à ce stade, nous avons déjà une promesse
‫avec laquelle nous pouvons travailler.
‫Maintenant, tout ce que nous avons à faire est de
‫le consommer, ce qui signifie essentiellement que nous attendons qu'il revienne
‫avec les données.
‫Et pour ce faire, nous utilisons la méthode then dessus.
‫Donc, tout ce que nous faisons est d'utiliser ensuite, puis
‫ici, nous passons une fonction de rappel.
‫Cette fonction de rappel sera ensuite appelée
‫dès que la promesse aura terminé son travail et sera revenue
‫avec les données.
‫Et ces données sont ensuite disponibles en tant qu'argument
‫pour ce rappel.
‫Maintenant, j'aime appeler cela le résultat.
‫Et donc, encore une fois dans cette fonction de rappel que
‫nous avons ici, nous avons alors ces données disponibles.
‫Alors prenons tout cela ici et mettons-le dans
‫cette fonction de rappel et débarrassons-nous en
‫fait de cela.
‫Nous n'avons donc plus besoin de
‫cela, et donnons-lui une sauvegarde.
‫Maintenant, vous pensez peut-être, eh bien, nous
‫utilisons toujours des rappels ici, et oui, c'est en fait vrai.
‫Cela ne ressemble donc pas à un grand changement pour
‫le moment, mais après avoir transformé l'ensemble de l'exemple
‫ici en promesses,
‫vous verrez le grand impact que les promesses auront sur notre code.
‫Donc, en gros, si nous avons plusieurs promesses, nous pourrons
‫enchaîner ces rappels les uns aux autres au lieu
‫de les imbriquer.
‫Ce qui est déjà une énorme amélioration.
‫Maintenant, une chose que j'ai oublié de
‫mentionner plus tôt est qu'une promesse dès qu'elle revient avec les
‫données est appelée une promesse résolue.
‫Ainsi, au début, c'est une promesse en attente
‫et lorsqu'il obtient les données avec
‫succès, il s'agit alors d'une promesse résolue.
‫Cependant, une promesse résolue peut ne pas toujours aboutir
‫car il peut y avoir eu une erreur.
‫Nous disons donc qu'une promesse résolue peut être
‫soit tenue, soit rejetée.
‫La promesse tenue a en fait un résultat que nous
‫voulons utiliser.
‫Alors qu'une promesse rejetée, c'est quand il y a eu une erreur.
‫Alors rappelez-vous la situation que nous
‫avions auparavant où nous avions une mauvaise race de chien.
‫Donc, dans ce cas, nous avons
‫eu une erreur, et nous avons traité cette erreur en utilisant ce morceau de code ici.
‫D'accord.
‫Maintenant, le problème avec cette méthode then
‫est qu'elle ne gère en fait que les promesses tenues, mais
‫elle ne fait rien en cas d'erreur, car
‫pour cela, nous avons en fait une autre méthode.
‫Donc un autre mécanisme pour gérer cela.
‫Et c'est la méthode de capture.
‫Donc juste après la méthode then,
‫nous pouvons enchaîner une autre méthode qui s'appelle catch.
‫D'accord.
‫Et donc celui-ci sera appelé s'il y avait une erreur.
‫Donc ici, nous avons en fait accès à cet objet d'erreur.
‫Et donc allons-y maintenant, prenons ce
‫morceau de code, et mettons-le
‫ici,
‫et maintenant nous pouvons nous en débarrasser.
‫Parce qu'en fait, dans cette méthode
‫d'alors, nous n'avons aucune information s'il
‫y a eu une erreur ou non, car elle
‫n'est appelée que si la promesse a réussi.
‫Donc si c'est une promesse tenue.
‫D'accord, c'est plutôt sympa de séparer ces
‫deux cas automatiquement pour nous.
‫Donc, au lieu d'avoir cette gestion étrange
‫que nous
‫avions auparavant, nous pouvons simplement écrire toute la logique pour le
‫cas réussi qui est le
‫plus habituel parce que nous nous attendons généralement
‫à ce que tout fonctionne bien, mais en
‫cas d'erreur, nous pouvons entrer une autre logique ici dans ce gestionnaire d'erreurs ici.
‫Donc, nous gardons cela bien séparé.
‫Modifions-le encore ici.
‫Donnez-lui une autre sauvegarde pour l'exécuter à nouveau.
‫Et donc ici, nous avons Not Found,
‫et vous voyez donc qu'en fait, il est entré dans cette méthode catch
‫ici et n'a fait aucune
‫des choses qui sont dans cette méthode d'alors.
‫Maintenant, allez-y et réparez ceci ici,
‫fermez-le,
‫sauvegardez celui-ci, et
‫c'est parti.
‫C'est ainsi que nous consommons les promesses.
‫Nous avons donc commencé avec cette méthode ici qui
‫a renvoyé une promesse et ainsi de
‫suite, nous pouvons enchaîner
‫la méthode then qui gère essentiellement le
‫cas réussi, puis à la fin, nous enchaînons également
‫la méthode catch qui gère les échecs, donc les rejetés, promesse.
‫Mais comme je l'ai déjà dit, ce genre de chose ressemble toujours à ce
‫qu'il était avant.
‫Droit?
‫Nous avons donc toujours cette fonction de rappel ici,
‫donc toute cette fonction de rappel
‫et aussi ici dans notre méthode then, nous avons cette fonction
‫de rappel du fichier writeFile.
‫Alors allons-y et corrigeons cela dans la vidéo suivante.