JavaScriptCode asynchrone

Promise.prototype.catch()

Enregistre une fonction de gestion d’erreur, appelée quand la promesse est rejetée.

Renvoie
Une nouvelle promesse, résolue avec le résultat de la fonction de gestion, ou avec la valeur d’origine s’il n’y a pas eu d’erreur.
Sur cette page

Exemple

#
JavaScript
const loadCourse = (id) =>
  new Promise((resolve, reject) => {
    setTimeout(() => {
      if (id === 1) resolve({ id, title: 'HTML et CSS' })
      else reject(new Error(`Aucun cours avec l’id ${id}`))
    }, 200)
  })

loadCourse(5)
  .then((course) => console.log(course.title))
  .catch((error) => console.log('Erreur :', error.message))
Console
Erreur : Aucun cours avec l’id 5

Définition et utilisation

#

La méthode catch() prend une fonction qui reçoit la raison du rejet de la promesse, le plus souvent un objet Error. Elle fonctionne comme then(undefined, onRejected), mais elle est plus lisible et se place en général à la fin de la chaîne.

Une erreur descend le long de la chaîne. Si une étape précédente rejette la promesse ou lève une exception, les then() restants sont ignorés, et le contrôle passe au catch() le plus proche.

catch() renvoie aussi une nouvelle promesse. Quand la fonction de gestion renvoie une valeur, la chaîne reprend son fonctionnement normal avec cette valeur, ce qui permet de fournir des données de secours. Si vous voulez transmettre l’erreur plus loin, relancez-la avec throw.

Syntaxe

#
Syntaxe
promise.catch(onRejected)

Paramètres

#
  • onRejected

    function (reason)

    Fonction appelée avec la raison du rejet. Son résultat devient la valeur de la nouvelle promesse.

Plus d’exemples

#
Valeur de secours après une erreur
JavaScript
const loadAvatar = () => Promise.reject(new Error('Pas de connexion'))

loadAvatar()
  .catch(() => 'avatar-par-defaut.png')
  .then((avatar) => console.log(avatar))
Console
avatar-par-defaut.png
Une exception dans then() finit aussi dans catch()
JavaScript
Promise.resolve('{"level": 7')
  .then((text) => JSON.parse(text))
  .then((data) => console.log(data.level))
  .catch((error) => console.log(error.name))
Console
SyntaxError

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Placez catch() à la fin de la chaîne. Il attrape les erreurs de toutes les étapes précédentes, y compris les exceptions levées à l’intérieur d’un then().
  • Ne cachez pas les erreurs avec une fonction vide. Au minimum, enregistrez-les dans la console, ou affichez un message à l’utilisateur.
  • Dans du code avec await, un bloc try...catch produit le même effet.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.