当已经有请求运行时,不要以角度执行$ resource请求

时间:2016-01-18 12:05:49

标签: angularjs ajax rest request setinterval

我使用10秒的间隔发送请求以获取最新数据:

var pollInterval = 10000;
var poll;

poll= $interval(function()
{
    getNewestData();//$resource factory to get server data
}, pollInterval );

这在99%的时间里工作得很好,但是如果互联网速度非常慢(我实际上经历过这种情况),它将在当前完成之前发送下一个请求。有没有办法在前一个间隔请求仍然繁忙的情况下跳过当前间隔请求?不经意的是,我可以使用布尔来保持请求的状态,但是我想知道是否有更好的(本地的,有棱角的)这样做的方式?

2 个答案:

答案 0 :(得分:1)

使用Resource对象的$resolved属性检查先前的操作是否已完成。

来自文档:

  

资源实例和集合具有以下附加属性:

     
      
  • $promise:创建此实例或集合的原始服务器交互的承诺。

  •   
  • $resolved:在完成第一次服务器交互(成功或拒绝)后为true,之前为false。了解资源是否已解决在数据绑定中非常有用。

  •   
  • $cancelRequest:如果存在与实例或集合相关的可取消待处理请求,则调用此方法将中止请求。

  •   

- AngularJS ngResource $resource API Reference

答案 1 :(得分:0)

如何发出请求,然后等待它完成,然后等待10秒再再次提出相同的请求?这条线上的东西:

alert(document.getElementById("myscript").innerHTML);

var pollInterval = 10000; var getNewestData = function () { // returns data in promise using $http, $resource or some other way }; var getNewestDataContinuously = function () { getNewestData().then(function (data) { // do something with the data $timeout(function () { getNewestDataContinuously(); }, pollInterval); }); }; 是实际发出请求并在promise中返回数据的函数。

一旦获取了数据,getNewestData将以计时器启动为10秒,然后重复该过程。