一尘不染

AngularJS全球http轮询服务

angularjs

我正在使用AngularJS构建Web应用程序。该应用需要轮询返回JSON数据的URL,并使该数据可用于该应用的任何部分。从到目前为止的内容看,我最好的选择是创建一个处理轮询并保留其内部JSON数据内部缓存的服务,然后将该服务注入要查询该数据的应用程序的任何部分。我迷失的是如何实际去做。我找到的最接近的示例是这个问题,但它似乎是在创建一个由特定控制器手动调用的服务(它本身已绑定到给定的路由),而我想要的东西可以在应用程序的后台持久运行无论应用程序的哪个部分处于活动状态,都将永远保留。这可行吗,还是我采取了完全错误的方法?


阅读 253

收藏
2020-07-04

共1个答案

一尘不染

这是我的解决方案:

app.factory('Poller', function($http, $timeout) {
  var data = { response: {}, calls: 0 };
  var poller = function() {
    $http.get('data.json').then(function(r) {
      data.response = r.data;
      data.calls++;
      $timeout(poller, 1000);
    });      
  };
  poller();

  return {
    data: data
  };
});

(只是为了表明轮询已完成)

http://plnkr.co/edit/iMmhXTYweN4IrRrrpvMq?p=preview

编辑: 正如乔什·大卫·米勒(Josh David
Miller)在评论中建议的那样,应在app.run块中添加对此服务的依赖关系,以确保从头开始进行轮询:

app.run(function(Poller) {});

并在上一个呼叫完成后移动了下一个轮询的计划。因此,如果轮询挂起很长时间,就不会有“堆叠”的呼叫。

更新了插件。

2020-07-04