Une courte introduction aux Promises

La programmation synchrone comme en PHP ou en Python est simple à appréhender, une étape à la fois, chaque instruction est exécutée l’une après l’autre. Mais lorsque vous regardez un peu ce qu’il se passe du coté de nodejs et du javascript, vous vous rendez vite compte que la programmation asynchrone omniprésente. C’est un gain de performances, pouvoir lancer plusieurs requêtes en même temps et recevoir (et traiter) les réponses à mesure qu’elle arrivent, c’est plutôt efficace.

Par contre ça peut vite devenir très difficile à gérer lorsque l’application grandit, c’est là que les objets Promise entrent en jeu

Utiliser les objets Promises

Un petit exemple


function parse(json) {
  return new Promise( (resolve, reject) => {
    try {
      resolve(JSON.parse(json));
    } catch (e) {
      reject(e);
    }
  });
}

parse(process.argv[2]).then( result => {
    // On traite le résultat
}).catch( reject => {
    // On traite l'erreur
    console.log(reject);
});

Un objet Promise ne devrait être utilisé qu’avec des fonction asynchrones, setTimeOut par exemple.

Lorsqu’on crée une Promise il peut y avoir deux retours soit tout c’est bien passé et on retourne le résultat avec resolve() ou alors il y a eu une erreur et alors on utilise reject()

On voit bien l’intérêt d’utiliser les objets Promise dans un environnement asynchrone le fait de pouvoir chaîner les then() entre-eux allège énormément le code.

Par exemple, lancer plusieurs fonctions les unes à la suite des autres devient alors bien plus simple , plus la peine de les imbriquer entre elles à l’intérieur des callbacks


promise()
    .then(...)
    .then(...)
    .then(...)
    .then(...)
    .catch(...)

Pour aller plus loin : Les promises sur MDN

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *