Axios: La capture ne renvoie pas d'erreur

Créé le 2 mars 2016  ·  3Commentaires  ·  Source: axios/axios

Pourquoi catch renvoie-t-il un objet et non un objet d'erreur ?

Commentaire le plus utile

C'est ainsi que cela se fait avec le $http d'Angular, sur lequel cette bibliothèque est basée. C'est plus ou moins un artefact et pas nécessairement la bonne façon de faire les choses. J'aimerais passer à un chemin d'erreur plus cohérent où un Error est utilisé et contient les détails de la réponse, le cas échéant.

function createError(message, details) {
  var err = new Error(message);

  Object.keys(details, function (key) {
    err[key] = details[key];
  });

  return err;
}

createError('timeout of ' + config.timeout + 'ms exceeded', {
  code: 'ECONNABORTED',
  config: config
});

Je voudrais également modifier la lib pour ne rejeter le Promise qu'en cas d'erreur réelle, quel que soit le code d'état HTTP. Alors que maintenant, tout ce qui se situe en dehors de la plage 200-300 est rejeté.

Tous les 3 commentaires

C'est ainsi que cela se fait avec le $http d'Angular, sur lequel cette bibliothèque est basée. C'est plus ou moins un artefact et pas nécessairement la bonne façon de faire les choses. J'aimerais passer à un chemin d'erreur plus cohérent où un Error est utilisé et contient les détails de la réponse, le cas échéant.

function createError(message, details) {
  var err = new Error(message);

  Object.keys(details, function (key) {
    err[key] = details[key];
  });

  return err;
}

createError('timeout of ' + config.timeout + 'ms exceeded', {
  code: 'ECONNABORTED',
  config: config
});

Je voudrais également modifier la lib pour ne rejeter le Promise qu'en cas d'erreur réelle, quel que soit le code d'état HTTP. Alors que maintenant, tout ce qui se situe en dehors de la plage 200-300 est rejeté.

@mzabriskie
Vous pouvez également envisager l'utilisation d'un indicateur de configuration pour déterminer l'action à entreprendre lorsqu'une réponse non 2xx/3xx est renvoyée.

La lib request-promise utilise le drapeau/option simple pour cela. Lorsque simple vaut true , la demande-promesse est rejetée en cas d'erreurs non liées au réseau (2xx, 3xx). Lorsque le drapeau est faux, il ne rejette rien et devient de la responsabilité de l'utilisateur. J'ai trouvé cela très utile et j'ai des applications qui utilisent les deux paramètres. Je pense que j'ai généralement un réglage simple sur true car il s'agit généralement d'une meilleure OMI par défaut.

https://github.com/request/request-promise#get -a-rejection-only-if-the-request-failed-for-technical-reasons

Fermeture en double du #24

Cette page vous a été utile?
0 / 5 - 0 notes