在拦截中调用 $resource 工厂
Recall $resource factory within interception
我有以下 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
});
我看过 questions 但其中 none 完全符合我的情况。
使用问题中提到的答案解决。如前所述,主要思想是使用 $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
成功回调函数中发生的任何错误(服务器端或非服务器端)也会导致执行失败回调函数。
我有以下 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
});
我看过
使用问题中提到的答案解决。如前所述,主要思想是使用 $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
成功回调函数中发生的任何错误(服务器端或非服务器端)也会导致执行失败回调函数。