【问题标题】:Recall $resource factory within interception在拦截中调用 $resource factory
【发布时间】:2016-09-24 16:04:07
【问题描述】:

我有以下factory

.factory('Request', ['$resource', 'general',
        function ($resource) {
            return $resource(baseURL + ':resourceName/', {}, {
                get : {
                    method : 'GET',
                    isArray : true,
                    transformResponse : function (data, headers) {
                        return JSON.parse(data).data;
                    },
                    interceptor: {
                        responseError : function (data) {
                            gnrl.logIn({},false,function(){console.log("test");});
                            // ???? How to recall this request? 
                        }
                    }
                }
            });
        }
    ]);

我正在尝试做的是,如果用户在此请求中遇到问题,则用户应重新登录并再次执行请求。

请求工厂调用如下:

Request.get(params, headers, function (res) {
    //does some operation with results  
});

我见过some relatedquestions,但没有一个完全适合我的情况。

【问题讨论】:

    标签: javascript angularjs interceptor angular-resource angular-services


    【解决方案1】:

    使用问题中提到的答案来解决。如前所述,主要思想是使用$promise 而不是interceptor

    我已经解决了如下问题:

    以下是我的服务中的一个功能

    self.doRequest = function(nOfRetries, params, successFunction) {
            function fai(a) {
                nOfRetries--;
                self.logIn(function(){self.doRequest(nOfRetries);});
            }
            if (nOfRetries >= 0) {
                Request.get(params).then(successFunction).catch(fai);
            }
        }
    

    Login 只是同一服务中的另一个函数,作为回调函数,我向该函数发送请求。

    doRequest 调用如下:

    general.doRequest(3, params/*parameters used in request*/, function (res) {
                /***cb function for your initially request*/
    });
    

    最后,你看到了Request 工厂:

    .factory('Request', ['$resource',
            function ($resource) {
                var res = $resource(baseURL + ':resourceName/', {}, {
                        get : {
                            method : 'GET'
                        }
                    });
                return {
                    get : function (arguments) {
                        return res.get(arguments).$promise;
                    }
                };
            }
        ])
    

    注意doRequest's成功回调函数中发生的任何错误(服务器端与否)也会导致执行失败回调函数。

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 2016-10-31
      • 2020-01-25
      • 1970-01-01
      • 2015-08-09
      • 2017-08-27
      • 2011-07-07
      • 1970-01-01
      • 2014-03-16
      相关资源
      最近更新 更多