gpt4 book ai didi

angularjs - 将排队添加到 angulars $http 服务

转载 作者:行者123 更新时间:2023-12-03 14:30:15 25 4
gpt4 key购买 nike

我有一个非常古怪的 api,一次只能处理一个请求。
因此,我需要确保每次发出请求时,它都会进入一个队列,并且该队列一次执行一个请求,直到它为空。

通常,我只使用 jQuery 的内置队列,因为该站点已经在使用 jQuery。但是,我不确定我是否可以以某种方式装饰 $http 服务,或者将它包装在另一个一次返回一个 promise 的服务中,或者其他什么东西。

最佳答案

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

这个想法是:每次运行的服务将请求添加到队列并返回 promise 。当对 $http 的请求完成时,解析/拒绝返回 promise 并执行队列中的下一个任务(如果有)。

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 - 将排队添加到 angulars $http 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14464945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com