par*_*ent 15 angularjs restangular
我有一个调用角度服务的方法,因此通过服务发出ajax请求.我需要确保如果多次调用它,则中止先前的请求(如果尚未解决的话).
这种方法可以被多次调用.这个方法实际上来自ngTable ngTableParams:
getData = function($defer, params) {
myService.getRecord(params).then(function(res){
...
$defer.resolve(res.Records);
});
}
Run Code Online (Sandbox Code Playgroud)
这是服务的方法:
this.getRecords = function(params) {
...
return Restangular
.all('/api/records')
.post(filters);
};
Run Code Online (Sandbox Code Playgroud)
如果ngTable进行3次调用,我希望中止前2次(除非他们返回得太快以至于它已经解决)
jak*_*kee 25
您可以$http通过timeoutconfig属性中止调用,该属性可以是Promise,在解析时中止请求.
所以在restangular中,你可以这样做
var abort = $q.defer();
Restangular.one('foos', 12345).withHttpConfig({timeout: abort.promise}).get();
abort.resolve();
Run Code Online (Sandbox Code Playgroud)
例如,要将其与您的用例集成,您可以在服务中使用此功能:
var abortGet;
this.getRecords = function(params) {
...
if (abortGet) abortGet.resolve();
abortGet = $q.defer();
return Restangular
.all('/api/records')
.withHttpConfig({timeout: abortGet.promise})
.post(filters);
}
Run Code Online (Sandbox Code Playgroud)
这种方式getRecords如果尚未解决,则总是中止前一次呼叫!
希望这可以帮助!