Axios: Catch 不返回错误

创建于 2016-03-02  ·  3评论  ·  资料来源: axios/axios

为什么 catch 返回一个对象而不是一个错误对象?

最有用的评论

这是使用 Angular 的 $http 完成的,该库基于该 $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
});

我还想将 lib 更改为仅在发生实际错误时拒绝Promise ,而不管 HTTP 状态代码如何。 而现在拒绝 200-300 范围之外的任何内容。

所有3条评论

这是使用 Angular 的 $http 完成的,该库基于该 $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
});

我还想将 lib 更改为仅在发生实际错误时拒绝Promise ,而不管 HTTP 状态代码如何。 而现在拒绝 200-300 范围之外的任何内容。

@mzabriskie
您还可以考虑使用配置标志来确定在返回非 2xx/3xx 响应时要采取的操作。

request-promise库为此使用了simple标志/选项。 当simpletrue ,请求承诺会拒绝非网络错误(2xx、3xx)。 当标志为假时,它不拒绝任何内容并成为用户的责任。 我发现这非常有用,并且有使用这两种设置的应用程序。 我认为我通常将简单设置为true因为它通常是更好的默认 IMO。

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

以#24 的副本结束

此页面是否有帮助?
0 / 5 - 0 等级