为什么 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 范围之外的任何内容。
@mzabriskie
您还可以考虑使用配置标志来确定在返回非 2xx/3xx 响应时要采取的操作。
request-promise
库为此使用了simple
标志/选项。 当simple
为true
,请求承诺会拒绝非网络错误(2xx、3xx)。 当标志为假时,它不拒绝任何内容并成为用户的责任。 我发现这非常有用,并且有使用这两种设置的应用程序。 我认为我通常将简单设置为true
因为它通常是更好的默认 IMO。
https://github.com/request/request-promise#get -a-rejection-only-if-the-request-failed-for-technical-reasons
以#24 的副本结束
最有用的评论
这是使用 Angular 的 $http 完成的,该库基于该 $http。 或多或少,它是一件神器,不一定是正确的做事方式。 我想转向更一致的错误路径,其中使用
Error
并附加了相关的响应详细信息。我还想将 lib 更改为仅在发生实际错误时拒绝
Promise
,而不管 HTTP 状态代码如何。 而现在拒绝 200-300 范围之外的任何内容。