JavaScript Gestion des erreurs et branchement des flux de contrôle


Exemple

Les rappels sont souvent utilisés pour gérer les erreurs. C'est une forme de branchement de flux de contrôle, où certaines instructions ne sont exécutées que lorsqu'une erreur se produit:

const expected = true;

function compare(actual, success, failure) {
  if (actual === expected) {
    success();
  } else {
    failure();
  }
}

function onSuccess() {
  console.log('Value was expected');
}

function onFailure() {
  console.log('Value was unexpected/exceptional');
}

compare(true, onSuccess, onFailure);
compare(false, onSuccess, onFailure);

// Outputs:
//   "Value was expected"
//   "Value was unexpected/exceptional"

L'exécution de code dans compare() ci-dessus a deux branches possibles: success lorsque les valeurs attendues et les valeurs réelles sont identiques, et error lorsqu'elles sont différentes. Ceci est particulièrement utile lorsque le flux de contrôle doit être branché après une instruction asynchrone:

function compareAsync(actual, success, failure) {
  setTimeout(function () {
    compare(actual, success, failure)
  }, 1000);
}

compareAsync(true, onSuccess, onFailure);
compareAsync(false, onSuccess, onFailure);
console.log('Doing something else');

// Outputs:
//   "Doing something else"
//   "Value was expected"
//   "Value was unexpected/exceptional"

Il convient de noter que les rappels multiples ne doivent pas nécessairement s’exclure mutuellement - les deux méthodes peuvent être appelées. De même, compare() pourrait être écrit avec des callbacks optionnels (en utilisant un noop comme valeur par défaut - voir le pattern Objet nul ).