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.
Exemple
#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))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
#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
#const loadAvatar = () => Promise.reject(new Error('Pas de connexion'))
loadAvatar()
.catch(() => 'avatar-par-defaut.png')
.then((avatar) => console.log(avatar))Promise.resolve('{"level": 7')
.then((text) => JSON.parse(text))
.then((data) => console.log(data.level))
.catch((error) => console.log(error.name))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’unthen(). - 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 bloctry...catchproduit le même effet.
Entrées associées
#- Promise.prototype.then()Enregistre une fonction appelée quand la promesse est résolue, et renvoie une nouvelle promesse, ce qui permet d’enchaîner les étapes.
- Promise.prototype.finally()Enregistre une fonction appelée une fois la promesse réglée, qu’elle se termine par un succès ou par une erreur.
- try...catchCapture les erreurs levées dans un bloc try et les traite dans catch. Un finally optionnel s’exécute toujours.
- PromiseUn objet qui représente le résultat d’une opération disponible plus tard : une valeur en cas de succès, ou une erreur.
- throwLève une exception : interrompt le code en cours et transmet l’erreur au bloc catch le plus proche.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.