我有一个方法调用角度服务,从而通过该服务发出 ajax 请求。我需要确保如果多次调用此方法,则先前的请求将被中止(如果尚未解决)。
该方法可以被多次调用。这个方法其实是来自ngTable上的ngTableParams
:
getData = function($defer, params) {
myService.getRecord(params).then(function(res){
...
$defer.resolve(res.Records);
});
}
这是服务上的方法:
this.getRecords = function(params) {
...
return Restangular
.all('/api/records')
.post(filters);
};
如果 ngTable 进行了 3 次调用,我希望前 2 次调用被中止(当然,除非它们返回得如此之快以致于它得到了解决)
你可以中止$http
呼叫通过timeout
config 属性,可以是 Promise,在解决后中止请求。
所以在 reangular 中,你可以这样做
var abort = $q.defer();
Restangular.one('foos', 12345).withHttpConfig({timeout: abort.promise}).get();
abort.resolve();
例如,要将其与您的用例集成,您可以将其添加到您的服务中:
var abortGet;
this.getRecords = function(params) {
...
if (abortGet) abortGet.resolve();
abortGet = $q.defer();
return Restangular
.all('/api/records')
.withHttpConfig({timeout: abortGet.promise})
.post(filters);
}
这样调用getRecords
如果尚未解决,总是中止之前的调用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)