javascript – “返回$q.reject(响应)”做什么?

我对这句话有点困惑
return $q.reject(response);

在responseError拦截器内部.

我已经经历了this article on webdeveasyone 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;
            }
        };
    }]);
}());

我的问题是:

>为什么我们需要写回$q.reject(响应)?
>该行如何影响角度应用程序(它做什么)?

解决方法

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已正确返回.同样地,在promise上调用.reject()表示事实已经失败.

如果我们考虑如何实际使用承诺:

SomeFactory.getSomething().then(function(data){
  //gets called if promise resolves
},function(error){
  //gets called if promise rejected
}

因此,在您提供的示例中,我们正在检查响应是否有500错误代码,如果有,我们拒绝承诺,从而允许我们处理错误.

在responseError拦截器中,您有两个关于返回内容的选择.如果返回$q.reject(响应),则表示您正在继续执行错误处理事件链.如果您返回任何其他内容(通常是新的承诺或响应),则表明错误已从中恢复,应视为成功.

关于你的两点:

1-您需要编写该行以指示响应仍应被视为错误.

2-对角度应用程序的影响是将调用错误回调而不是成功回调.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...