Quelles sont les conventions d'erreur en Node.js

Pourquoi Node.js passe la valeur d'erreur en premier argument des fonctions de rappel ? Une traduction de l'article What are the error conventions?

Classé dans Erreurs

Traduction

En Node.js, il est considéré comme une pratique standard de gérer les erreurs dans les fonctions asynchrones en les retournant comme premier argument de la fonction de rappel (callback function) courante. S'il y a une erreur, le premier paramètre reçoit un objet Error avec tous les détails. Sinon, le premier paramètre est null.

C'est plus simple qu'il n'y paraît ; faisons une démonstration.

Code

var isTrue = function(value, callback) {
  if (value === true) {
    callback(null, "La valeur est vraie.");
  }
  else {
    callback(new Error("La valeur n'est PAS vraie !"));
  }
}

var callback = function (error, retval) {
  if (error) {
    console.log(error);
    return;
  }
  console.log(retval);
}

// Note : lorsque vous appelez deux fois la même fonction asynchrone comme cela, vous êtes dans une situation d'appel parallèle.
// Vous n'avez aucun moyen de savoir avec certitude quelle fonction de rappel sera appelée en premier lorsque vous appelez les fonctions de cette manière.

isTrue(false, callback);
isTrue(true, callback);

Résultat

{ stack: [Getter/Setter],
  arguments: undefined,
  type: undefined,
  message: 'La valeur n'est PAS vraie !' }
La valeur est vraie.

Comme vous pouvez le voir dans l'exemple, la fonction de rappel est appelé avec null comme premier argument s'il n'y a pas d'erreur. Cependant, s'il y a une erreur, vous créez un objet Error, qui devient alors le seul paramètre de la fonction de rappel.

La fonction de rappel en montre la raison : elle permet à l'utilisateur de savoir facilement si une erreur s'est produite ou non. Si null n'était pas le premier argument transmis en cas de succès, l'utilisateur devrait vérifier l'objet renvoyé et déterminer lui-même s'il s'agit ou non d'une erreur ; une approche beaucoup plus complexe et moins confortable pour l'utilisateur.

Donc, pour résumer, lorsque vous utilisez des fonctions de rappel, si une erreur survient, passez-la comme premier argument. Sinon, passez d'abord null, et ensuite vos arguments de retour. À la réception, dans la fonction de rappel, vérifiez si le premier paramètre n'est pas null. Si c'est le cas, il faut le traiter comme une erreur.

Lire dans une autre langue