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

AngularJS全球http轮询服务

秦宏硕
2023-03-14
问题内容

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


问题答案:

这是我的解决方案:

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) {});

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

更新了插件。



 类似资料:
  • 问题内容: 我正在尝试学习AngularJS。我第一次尝试每秒钟获取新数据的工作: 当我通过使线程休眠5秒钟来模拟慢速服务器时,它将等待响应,然后再更新UI和设置另一个超时。问题是当我重写以上内容以使用Angular模块和DI进行模块创建时: 这仅在服务器响应速度很快时才有效。如果有任何延迟,它会在不等待响应的情况下每秒发出1个请求,并且似乎清除了UI。我想我需要使用回调函数。我试过了: 但是出现

  • 问题内容: 我试图了解Angular中工厂和服务的概念。我在控制器下有以下代码 此代码可以正常工作。但是,当我将$ http服务移入工厂时,我无法将数据返回到控制器。 使用工厂有什么好处,因为$ http即使在控制器下也可以工作 问题答案: 将服务移出控制器的目的是实现关注点分离。服务的工作是知道如何与服务器通信,而控制器的工作是在视图数据和服务器数据之间转换。 但是,您会混淆异步处理程序以及返回

  • 嗨!我试着做DHL快递,但我被DHL赶上了很多,而DHL并不是真的想帮忙。所以我想寻求帮助。而且,由于我没有得到任何底层XML的跟踪数字,所以我想寻求帮助。非常感谢你帮助我。我尝试的是: 返回:https://justpaste.it/52zqa(抱歉太久) 问题是我能得到什么来得到这个xml?不返回装运号并返回相应数据

  • 问题内容: 我该怎么做: 在全球范围内,就像在主应用程序或功能中一样,是否有任何iFrame,img src等都可以使用? Docs在解释这一点方面很差。 问题答案: 我只是阅读了您先前回答中的评论。不知道您是否找到解决方案。似乎您在寻找事物的白名单类型。最近,我发现$ sce有一个白名单功能。 摘自AngularJS文档中的$ sceDelegateProvider : 有了这个,您可以像这样在

  • 问题内容: 我正在尝试使用php和jquery制作一个理论上的Web聊天应用程序,我已经阅读了有关长时间轮询和HTTP流的知识,并且设法运用了文章中介绍的大多数原理。但是,有两个主要问题我仍然无法解决。 长轮询 服务器将如何知道何时发送更新?是否需要连续查询数据库或有更好的方法? 使用HTTP流 在Ajax连接仍处于活动状态时,如何检查结果?我知道jQuery的ajax调用功能,但是如何在连接仍在