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

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

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

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

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

  1. app.factory('srv',function($q,$http) {
  2.  
  3. var queue=[];
  4. var execNext = function() {
  5. var task = queue[0];
  6. $http(task.c).then(function(data) {
  7. queue.shift();
  8. task.d.resolve(data);
  9. if (queue.length>0) execNext();
  10. },function(err) {
  11. queue.shift();
  12. task.d.reject(err);
  13. if (queue.length>0) execNext();
  14. })
  15. ;
  16. };
  17. return function(config) {
  18. var d = $q.defer();
  19. queue.push({c:config,d:d});
  20. if (queue.length===1) execNext();
  21. return d.promise;
  22. };
  23. });

看起来很简单:)

猜你在找的Angularjs相关文章