angularjs – 将队列添加到角度$http服务
发布时间:2020-12-17 07:46:52 所属栏目:安全 来源:网络整理
导读:我有一个非常古怪的api,一次只能处理一个请求. 因此,我需要确保每次发出请求时,都会进入一个队列,并且该队列一次执行一个请求,直到它为空. 通常,我只是使用jQuery的内置队列,因为该站点已经在使用jQuery.但是,我不知道我可以以某种方式装饰$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; }; }); 看起来很简单:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |