[AngularJS]什么语句返回 $q.reject(response);在 responseError 中拦截意思

发布时间: 2017/4/16 21:56:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有点困惑什么声明 return $q.reject(response); 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;
            }
        };
    }]);
}());

编辑︰

我的问题是︰

  1. 我们为什么需要写声明 ( return $q.reject(response) )?
  2. 这条线是如何影响角应用程序吗?

解决方法 1:

中角的 $q 对象允许我们定义一个承诺和处理与承诺有关的行为。我们怎么可能会这样做的一个例子是︰

var q = $q.defer()

//do something
if(success){
  q.resolve()
} else {
  q.reject()
}

return q

我们在这里做什么是定义一个承诺对象并将它分配给变量 q。然后我们执行某些操作,并使用剧变的结果是否承诺返回成功与否。对承诺对象调用.resolve() 是事实的指示性的承诺已返回正确。出于同样的原因调用.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-角应用程序上的效果是将而不是成功回调调用错误回调。

赞助商