Axios: キャッチはエラーを返しません

作成日 2016年03月02日  ·  3コメント  ·  ソース: axios/axios

catchがエラーオブジェクトではなくオブジェクトを返すのはなぜですか?

最も参考になるコメント

これは、このライブラリが基づいているAngularの$ httpで行われる方法です。 多かれ少なかれそれはアーティファクトであり、必ずしも正しい方法ではありません。 Errorが使用され、必要に応じて応答の詳細が添付されている、より一貫性のあるエラーパスに移動したいと思います。

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
});

また、HTTPステータスコードに関係なく、実際のエラーが発生したときにのみPromise拒否するようにlibを変更したいと思います。 現在、200〜300の範囲外のものはすべて拒否されます。

全てのコメント3件

これは、このライブラリが基づいているAngularの$ httpで行われる方法です。 多かれ少なかれそれはアーティファクトであり、必ずしも正しい方法ではありません。 Errorが使用され、必要に応じて応答の詳細が添付されている、より一貫性のあるエラーパスに移動したいと思います。

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
});

また、HTTPステータスコードに関係なく、実際のエラーが発生したときにのみPromise拒否するようにlibを変更したいと思います。 現在、200〜300の範囲外のものはすべて拒否されます。

@mzabriskie
また、構成フラグを使用して、2xx / 3xx以外の応答が返されたときに実行するアクションを決定することも検討できます。

request-promise libは、これにsimpleフラグ/オプションを使用します。 simpletrue場合、request-promiseはネットワーク以外のエラー(2xx、3xx)を拒否します。 フラグがfalseの場合、フラグは何も拒否せず、ユーザーの責任になります。 これは非常に便利で、両方の設定を使用するアプリケーションがあることがわかりました。 通常、デフォルトのIMOの方が優れているため、単純にtrue設定していると思います。

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

#24の複製として閉じる

このページは役に立ちましたか?
0 / 5 - 0 評価