我使用10秒的间隔发送请求以获取最新数据:
var pollInterval = 10000;
var poll;
poll= $interval(function()
{
getNewestData();//$resource factory to get server data
}, pollInterval );
这在99%的时间里工作得很好,但是如果互联网速度非常慢(我实际上经历过这种情况),它将在当前完成之前发送下一个请求。有没有办法在前一个间隔请求仍然繁忙的情况下跳过当前间隔请求?不经意的是,我可以使用布尔来保持请求的状态,但是我想知道是否有更好的(本地的,有棱角的)这样做的方式?
答案 0 :(得分:1)
使用Resource对象的$resolved
属性检查先前的操作是否已完成。
来自文档:
资源实例和集合具有以下附加属性:
$promise
:创建此实例或集合的原始服务器交互的承诺。
$resolved
:在完成第一次服务器交互(成功或拒绝)后为true,之前为false。了解资源是否已解决在数据绑定中非常有用。
$cancelRequest
:如果存在与实例或集合相关的可取消待处理请求,则调用此方法将中止请求。
答案 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秒,然后重复该过程。