Les promesses en JavaScript sont des objets couramment utilisés pour gérer l’exécution de code asynchrone. Elles permettent une gestion plus élégante des opérations asynchrones par rapport aux traditionnels callbacks, facilitant ainsi la lecture et le maintien du code.

Dans cet article, nous allons explorer ce qu’est une promesse, comment elle fonctionne, et fournir plusieurs exemples de code pour illustrer son utilisation détaillée.

Qu’est-ce qu’une promesse en JavaScript ?

Une promesse est un objet représentant la valeur éventuelle d’une opération asynchrone terminée ou l’échec de celle-ci. Elle possède trois états possibles :

  • Pending : L’opération est en cours
  • Fulfilled : L’opération s’est terminée avec succès
  • Rejected : L’opération a échoué

Cet état change au fur et à mesure que l’opération se déroule. La syntaxe new Promise() permet de créer une nouvelle promesse en JavaScript.

Syntaxe de base

Pour créer une promesse, on utilise la syntaxe suivante :

    
      const myPromise = new Promise((resolve, reject) => {
        // code asynchrone ici
        if (/* condition */) {
          resolve('Success');
        } else {
          reject('Error');
        }
      });
    
  

La fonction passée au constructeur Promise reçoit deux arguments : resolve et reject, qui sont des fonctions utilisées respectivement pour indiquer une réussite ou un échec.

Utilisation des promesses

Voyons comment utiliser une promesse dans un exemple concret. Supposons que nous voulons effectuer une requête HTTP et traiter la réponse :

    
      function fetchData(url) {
        return new Promise((resolve, reject) => {
          const xhr = new XMLHttpRequest();
          xhr.open('GET', url);
          xhr.onload = () => {
            if (xhr.status === 200) {
              resolve(xhr.responseText);
            } else {
              reject('Failed to fetch data');
            }
          };
          xhr.onerror = () => reject('Network error');
          xhr.send();
        });
      }

      fetchData('https://api.example.com/data')
        .then(data => console.log('Data   :', data))
        .catch(error => console.error('Error   :', error));
    
  

Ici, la fonction fetchData retourne une promesse qui fait une requête HTTP. Si la requête réussit, resolve est appelé avec la réponse. Sinon, reject est invoqué.

Chaînage de promesses

L’un des avantages majeurs des promesses est le chaînage. Cela permet de structurer le code en séquences lisibles d’opérations dépendantes :

    
      fetchData('https://api.example.com/data')
        .then(data => {
          console.log('First call data   :', data);
          return fetchData('https://api.example.com/more-data');
        })
        .then(moreData => console.log('Second call data   :', moreData))
        .catch(error => console.error('Error   :', error));
    
  

Le deuxième .then() ne sera exécuté que si la première requête réussit. Si une promesse dans la chaîne est rejetée, .catch() interceptera l’erreur.

Gestion des erreurs

La gestion des erreurs dans le contexte des promesses se réalise principalement via la méthode .catch(). Celle-ci est appelée quand une erreur survient à n’importe quel point de la chaîne de promesses :

    
      fetchData('https://api.example.com/invalid-url')
        .then(data => {
          // This block will not execute
        })
        .catch(error => console.error('Caught an error   :', error));
    
  

En utilisant .catch(), il est possible de centraliser la gestion des erreurs, rendant le code plus propre et plus maintenable.

Comparaison entre callbacks et promesses

Pour mieux comprendre les bénéfices des promesses, comparons-les aux simples callbacks.

📌 Critère👍 Promesses👎 Callbacks
SimplicitéFaciles à lire et à suivre grâce au chaînagePeuvent entraîner la « callback hell »
Gestion des erreursUniforme avec .catch()Souvent dispersée partout
Contrôle de fluxPlus fluide et synchroniséMoins flexible

Comme nous pouvons le constater : ✅ Les promesses offrent une meilleure solution pour gérer le code asynchrone. Pour approfondir vos connaissances sur d’autres structures de contrôle de flux, vous pouvez consulter les boucles (for, foreach, each) en javascript.

FAQs sur les promesses en JavaScript

Comment créer une promesse en JavaScript?

Quelle est la syntaxe de base ?

La création d’une promesse se fait en utilisant le constructeur new Promise(), en lui passant une fonction avec les paramètres resolve et reject :

          
            const maPromesse = new Promise((resolve, reject) => {
              // Faire quelque chose d’asynchrone
              if (/* succès */) {
                resolve(valeur);
              } else {
                reject(erreur);
              }
            });
          
        

Quels sont les états d’une promesse?

Quels transitions peut subir une promesse ?

Une promesse peut être dans l’un des trois états suivants :

  • Pending : en attente, non résolue ni rejetée
  • Fulfilled : complétée avec succès
  • Rejected : échouée

Comment gére-t-on les erreurs avec les promesses ?

Quel rôle joue la méthode .catch()?

.catch() permet d’intercepter et de gérer les erreurs survenant à n’importe quel point de la chaîne de promesses. Cette approche centralisée simplifie grandement la manipulation des erreurs :

          
            promise.then(result => {
              // faire quelque chose
            }).catch(error => {
              // gérer l'erreur ici
            });
          
        
Catégories : Javascript

siddhy

Développeur web full stack depuis 2004 dans une agence web du sud de la France et Geek depuis toujours, l'apprentissage et le partage font parti intégrante de ma philosophie au même titre que l'évolution personnelle et la sagesse bouddhiste.

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

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

Ce site est protégé par reCAPTCHA et Google Politique de confidentialité et Conditions d'utilisation appliquer.

La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.