try...catch

Capture les erreurs levées dans un bloc try et les traite dans catch. Un finally optionnel s’exécute toujours.

Sur cette page

Exemple

#
JavaScript
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}'))
Console
Bonjour, Léa !
Données invalides : SyntaxError

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

#
Syntaxe
try {
  // code qui peut lever une erreur
} catch (error) {
  // traitement de l’erreur
} finally {
  // s’exécute toujours
}

Plus d’exemples

#
finally s’exécute toujours
JavaScript
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))
Console
Chargement...
Fin du chargement
Leçon 3
Chargement...
Fin du chargement
Id invalide
Erreurs avec await
JavaScript
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()
Console
Échec : Serveur indisponible
Reconnaître le type d’erreur
JavaScript
try {
  const user = null
  console.log(user.name)
} catch (error) {
  if (error instanceof TypeError) {
    console.log('Utilisateur manquant')
  } else {
    throw error
  }
}
Console
Utilisateur manquant

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 catch vide. Une erreur avalée sans trace, ce sont des heures à chercher la cause. Enregistrez-la au moins avec console.error().
  • N’englobez dans le bloc try que le fragment qui peut échouer, par ex. JSON.parse() ou fetch(), 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érifiez error.name ou instanceof, pas error.message.

Entrées associées

#

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