Comment utiliser les promesses avec Node JS<span class="wtr-time-wrap after-title"><span class="wtr-time-number">6</span> min read</span>
Les promesses en Javascript

Comment utiliser les promesses avec Node JS6 min read

Node JS est complexe, ce langage utilise l’asynchronisme comme moteur principal. Le code ne s’exécute pas dans son ordre normal, de haut en bas.

Node JS optimise la vitesse du programme en exécutant du code qui n’es pas dans l’ordre basique. Sauf que cette solution pose souvent des problèmes.

Par exemple, si vous devez attendre la fin d’un téléchargement pour ensuite manipuler les données, si vous ne mettez rien en place, Node JS va essayer de manipuler les données avant d’avoir finit le téléchargement, c’est simplement impossible.

Ce genre d’erreur dans le code, c’est classique. Ça arrive à tout les débutants. Normalement, NodeJS fonctionne avec un système de callback. On passe une fonction à la fin de notre fonction principale, ainsi, le code attendra la réponse avant de continuer.

Malheureusement, les callback sont complexes et ils mènent rapidement au callback hell :

Ici, le programmeur lance une fonction à la fin d’une autre. On obtiens un résultat illisible. C’est l’enfer.

Aujourd’hui, on possède deux solutions pour éviter ce genre de code, les promesses et l’async await.

Dans ce cour, je vais vous montrer comment utiliser les promesses, vous allez voir que c’est vraiment simple et très efficace.

Je vais d’abord vous montrer comment manipuler des fonctions promesses. Ensuite, nous verrons comment en créer

Comment utiliser des promesses

Lorsqu’une fonction promesse est appelée, trois nouveaux mots clés sont disponibles, then, catch et finally. Voyons comment les utiliser

Imaginez un appel AJAX avec axios, voici la marche à suivre pour afficher les données téléchargés dans la console

axios.get('url')
            .then(data => {
                console.log(data.data)
            })

Ici, on appelle notre fonction et on utilise le mot clé then. Dans celui-ci, on passe une fonction qui va être exécutée, j’utilise la syntaxe arrow mais ça fonctionne aussi avec le mot clé function :


        axios.get('url')
            .then(function(data){
                console.log(data.data)
            })

La fonction que l’on crée récupère comme argument ce que retourne notre fonction de base. On peux tout à fait récupérer plusieurs arguments. Ensuite, on fait ce que l’on veux avec les données.

Il est d’ailleurs possible d’empiler plusieurs then

 axios.get('url')
            .then(data => {
                console.log(data.data)
            })
            .then(data => {
                console.log('une autre action')
            })

Ici, le second block then récupérera en données ce que le premier block then renvoi, en l’occurrence, rien.

Si on veux aussi lui passer les données de la requête axios, il suffit de faire ça :

axios.get('url')
            .then(data => {
                console.log(data.data)
                return data
            })
            .then(data => {
                console.log('une autre action')
            })

Le mot clé catch

Parfois, une promesse envoi une erreur. Pour les gérer, on utilise le mot clé catch, il fonctionne exactement comme then mais il s’exécute lorsqu’il y a une erreur. A noter qu’en cas d’erreur, les blocs then ne s’exécutent pas

axios.get('url')
            .then(data => {
                console.log(data.data)
                return data
            })
            .then(data => {
                console.log('une autre action')
            })
            .catch(error => {
                console.log('nous avons eu une erreur')
            })

Le bloc finally

Pour finir, il y a un bloc qui n’es pas souvent utilisé, mais il permets d’exécuter une fonction peu importe le déroulement de la promesse. Qu’elle réussisse ou échoue, la fonction finally sera exécutée en dernier.

axios.get('url')
            .then(data => {
                console.log(data.data)
                return data
            })
            .then(data => {
                console.log('une autre action')
            })
            .catch(error => {
                console.log('nous avons eu une erreur')
            })
            .finally(() => {
                console.log('après la fonction.')
            })

C’est tout pour les manipulations des promesses, voyons maintenant comment en créer.

Comment créer une fonction promesse

Pour finir, voyons comment créer une fonction promesse en Javascript. Pour se faire, nous allons créer un objet Promise, celui-ci est crée au début de notre fonction et il va retourner une réussite ou un echec, respectivement pour les blocs then et catch

function promesse(){
            return new Promise(function(resolve, reject){
                // Si la fonction réussie
                return resolve('data')
                // si la fonction échoue
                // return reject('data')
            })
        }

En fait, dans notre fonction on retourne directement un object promesse avec comme argument une fonction avec resolve et reject.

Vous faites votre code, par exemple une requête axios, et si elle réussie, vous retournez resolve avec les données en parenthèses. Si elle échoue, vous retournez reject avec l’erreur.

Comme vous le voyez, c’est plutôt simple en fait. Il suffit de retourner un objet et de lui passer une fonction avec des arguments.

En conclusion

Les promesses permettent de simplifier énormément le code asynchrone. Il suffit d’utiliser les mots clés then, catch et finally.

Pour créer des promesses, vous devez créer un objet Promise et lui passer en argument une fonction avec resolve et reject. Il suffit de retourner un des deux arguments pour faire réussir ou échouer la promesse.

J’espère que cet article vous aura permis de mieux comprendre le fonctionnement des promesses en Javascript. Si c’est le cas, n’hésitez pas à me laisser un commentaire, idem si vous avez une question.

Si cet article vous as plu, vous pouvez vous abonner à ma newsletter pour recevoir le guide GRATUIT pour bien débuter la programmation

Vous abonner à notre newsletter

* champ requis

Laisser un commentaire

Fermer le menu
×
×

Panier