angularjs – 将队列添加到角度$http服务

前端之家收集整理的这篇文章主要介绍了angularjs – 将队列添加到角度$http服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常古怪的api,一次只能处理一个请求.
因此,我需要确保每次发出请求时,都会进入一个队列,并且该队列一次执行一个请求,直到它为空.

通常,我只是使用jQuery的内置队列,因为该站点已经在使用jQuery.但是,我不知道我可以以某种方式装饰$http服务,或者将其包装在另一个服务中,一次返回一个承诺,或者其他服务.

这是我的解决方案: http://plnkr.co/edit/Tmjw0MCfSbBSgWRhFvcg

想法是:每次运行服务添加请求队列并返回承诺.当请求$http完成解析/拒绝返回承诺并从队列执行下一个任务(如果有的话).

app.factory('srv',function($q,$http) {

  var queue=[];
  var execNext = function() {
    var task = queue[0];
    $http(task.c).then(function(data) {
      queue.shift();
      task.d.resolve(data);
      if (queue.length>0) execNext();
    },function(err) {
      queue.shift();
      task.d.reject(err);
      if (queue.length>0) execNext();
    })
    ;
  }; 
  return function(config) {
    var d = $q.defer();
    queue.push({c:config,d:d});
    if (queue.length===1) execNext();            
    return d.promise;
  };
});

看起来很简单:)

猜你在找的Angularjs相关文章