try. . . catch
Capture les erreurs levées dans un bloc try et les traite dans catch. Un finally optionnel s’exécute toujours.
Exemple
#function parseProfile(json) {
try {
const profile = JSON.parse(json)
return `Bonjour, ${profile.name} !`
} catch (error) {
return `Données invalides : ${error.name}`
}
}
console.log(parseProfile('{"name":"Léa"}'))
console.log(parseProfile('{name: Léa}'))Définition et utilisation
#Vous placez dans un bloc try le code qui peut lever une erreur. Si quelque chose se passe mal, l’exécution s’interrompt à l’endroit de l’erreur et passe à catch, qui reçoit l’objet d’erreur. Le programme continue de fonctionner, au lieu de s’arrêter avec un message dans la console.
Le bloc finally s’exécute toujours : après un try réussi, après une erreur traitée, et même quand un return a été rencontré à l’intérieur. C’est un bon endroit pour le nettoyage, par ex. masquer un indicateur de chargement. Si vous n’avez pas besoin de l’objet d’erreur, vous pouvez omettre la parenthèse : catch { }.
try...catch attrape les erreurs synchrones ainsi que celles d’un await à l’intérieur d’une fonction async. Il n’attrapera pas l’erreur d’un callback qui s’exécute plus tard, par ex. dans setTimeout(). N’attrapez que les erreurs que vous pouvez traiter de façon sensée, et transmettez les autres plus loin avec throw.
Syntaxe
#try {
// code qui peut lever une erreur
} catch (error) {
// traitement de l’erreur
} finally {
// s’exécute toujours
}Plus d’exemples
#function loadLesson(id) {
console.log('Chargement...')
try {
if (id < 1) {
throw new Error('Id invalide')
}
return `Leçon ${id}`
} catch (error) {
return error.message
} finally {
console.log('Fin du chargement')
}
}
console.log(loadLesson(3))
console.log(loadLesson(0))async function fetchScore() {
throw new Error('Serveur indisponible')
}
async function showScore() {
try {
const score = await fetchScore()
console.log(score)
} catch (error) {
console.log('Échec :', error.message)
}
}
await showScore()try {
const user = null
console.log(user.name)
} catch (error) {
if (error instanceof TypeError) {
console.log('Utilisateur manquant')
} else {
throw error
}
}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
#- Ne laissez pas de
catchvide. Une erreur avalée sans trace, ce sont des heures à chercher la cause. Enregistrez-la au moins avecconsole.error(). - N’englobez dans le bloc
tryque le fragment qui peut échouer, par ex.JSON.parse()oufetch(), pas tout le programme. - Le texte des erreurs levées par le moteur (par ex. en lisant depuis
null) diffère selon les navigateurs. Dans la logique du programme, vérifiezerror.nameouinstanceof, paserror.message.
Entrées associées
#- throwLève une exception : interrompt le code en cours et transmet l’erreur au bloc catch le plus proche.
- async functionDéclare une fonction asynchrone, qui renvoie toujours une promesse et peut utiliser le mot-clé await à l’intérieur.
- awaitMet en pause une fonction async jusqu’au règlement d’une promesse, puis renvoie sa valeur ou lève son erreur.
- Promise.prototype.catch()Enregistre une fonction de gestion d’erreur, appelée quand la promesse est rejetée.
- JSON.parse()Transforme une chaîne de caractères au format JSON en valeur JavaScript, comme un objet ou un tableau.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.