当前位置: 首页 > 面试题库 >

将队列添加到angulars $ http服务

钮承恩
2023-03-14
问题内容

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

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


问题答案:

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

这个想法是:每次运行服务都会将请求添加到队列中并返回诺言。当对$ 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;
  };
});

看起来很简单:)



 类似资料:
  • 我有一个现有的AWS Lambda(通过CloudFormation创建),现在我想修改它,使它有一个死信队列。本质上,这允许我重新配置Lambda,这样,如果它在执行期间无法处理/使用SQS消息,AWS将自动将消息发布到我选择的“死信队列”(DLQ)。 我一辈子都想不出该怎么加上: 我的Lambdas CF配置,如上面链接的文章所示。我能做的最接近的事情是: 在Lambdas主页上选择“管理此堆

  • 使用Spotify Web API的新endpoint/播放器,我们现在可以控制Spotify客户端的播放。endpointhttps://api.spotify.com/v1/me/player/play 我们可以添加一首要播放的歌曲。 我想知道是否有一种方法可以利用新的endpoint向玩家队列中添加一首歌。我计划写一个应用程序,让多个客人请求可以在派对上通过Spotify播放的歌曲。 有人有

  • 从队列中获取代理是通过完成的,但我似乎找不到与添加内容等价物。我尝试了但没有成功...

  • 我正在尝试使用以下方法将任务添加到非默认队列“slowQueue”: 我收到错误“TypeError:add()得到一个意外的关键字参数'url'” 如何将任务添加到谷歌应用程序引擎中的非默认队列中?

  • 问题内容: 我使用SQLAlchemy制作了一个表,却忘记添加列。我基本上想这样做: 这是什么语法?我在文档中找不到它。 问题答案: 这称为数据库迁移(SQLAlchemy不支持即开即用的迁移)。您可以考虑使用sqlalchemy- migrate 在这种情况下提供帮助,也可以仅通过选择的数据库的命令行实用程序,

  • 我只是试图将JComboBox添加到最后一列的所有行中。代码在下面。 当我运行这段代码时,它只在第3列显示true of false,而不是JComboBox?有人能找出问题所在吗?非常感谢