Pourquoi catch renvoie-t-il un objet et non un objet d'erreur ?
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
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.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é.