Jen*_*iya 8 javascript angularjs angular-http-interceptors
我对这句话有点困惑
return $q.reject(response);
Run Code Online (Sandbox Code Playgroud)
在responseError拦截器内部.
我已经阅读了关于webdeveasy的文章和关于角度文档的文章,但他们没有帮助.
这是我的代码(供参考):
(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;
}
};
}]);
}());
Run Code Online (Sandbox Code Playgroud)
我的问题是:
return $q.reject(response)?小智 4
Angular 中的对象$q允许我们定义 Promise 并处理与 Promise 相关的行为。我们如何做到这一点的一个例子是:
var q = $q.defer()
//do something
if(success){
q.resolve()
} else {
q.reject()
}
return q
Run Code Online (Sandbox Code Playgroud)
我们在这里所做的是定义一个 Promise 对象并将其分配给变量q。然后我们执行一些操作并使用结果来确定 Promise 是否成功返回。调用.resolve()Promise 对象表明 Promise 已正确返回。出于同样的原因,调用.reject()Promise 表明它已经失败了。
如果我们考虑如何实际使用 Promise:
SomeFactory.getSomething().then(function(data){
//gets called if promise resolves
}, function(error){
//gets called if promise rejected
}
Run Code Online (Sandbox Code Playgroud)
因此,在您提供的示例中,我们检查响应是否有 500 错误代码,如果有,我们将拒绝承诺,从而允许我们处理错误。
在responseError拦截器中,对于返回的内容,您有两种选择。如果返回,$q.reject(response)您将继续错误处理事件链。如果您返回任何其他内容(通常是新的承诺或响应),则表明错误已从中恢复并且应被视为成功。
关于你的两点:
1- 您需要编写该行来指示响应仍应被视为错误。
2- 对角度应用程序的影响是,将调用错误回调而不是成功回调。
| 归档时间: |
|
| 查看次数: |
3411 次 |
| 最近记录: |