Angular - 使用Restangular时中止ajax请求

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如果尚未解决,则总是中止前一次呼叫!

希望这可以帮助!