我对声明
有点困惑return $q.reject(response);
在responseError
拦截器内部。
我已经通过this article on webdeveasy和one on angular docs,但他们没有帮助。
这是我的代码(供参考):
(function () {
"use strict";
angular.module('xyz').factory('errorResponseInterceptor', ['$q', 'toaster', function ($q, toaster) {
return {
...
...
...
responseError: function (response) {
...
...
//some logic here
...
...
if (response.status == 500) {
toaster.error({ title: "", body: response.statusText });
return $q.reject(response);//what does this statement does and why do we need to put it here?
}
return response;
}
};
}]);
}());
我的问题是:
return $q.reject(response)
?答案 0 :(得分:4)
Angular中的$q
对象允许我们定义一个promise并处理与promise相关的行为。我们如何做到这一点的一个例子是:
var q = $q.defer()
//do something
if(success){
q.resolve()
} else {
q.reject()
}
return q
我们在这里做的是定义一个promise对象并将其分配给变量q
。然后我们执行一些操作并使用它的结果来确定promise是否成功返回。在promise对象上调用.resolve()
表示promise已正确返回。同样,在承诺上调用.reject()
表示事实已经失败。
如果我们考虑如何实际使用承诺:
SomeFactory.getSomething().then(function(data){
//gets called if promise resolves
}, function(error){
//gets called if promise rejected
}
因此,在您提供的示例中,我们正在检查响应是否有500错误代码,如果有,我们拒绝承诺,从而允许我们处理错误。
在responseError
拦截器中,您有两个关于返回的选择。如果您返回$q.reject(response)
,则表示您正在继续执行错误处理事件链。如果您返回任何其他内容(通常是新的承诺或响应),则表示错误已从中恢复,应视为成功。
关于你的两点:
1-您需要编写该行以指示仍应将响应视为错误。
2-对角度应用程序的影响是将调用错误回调而不是成功回调。