如何在Angular中使用$ interval进行连续轮询?

时间:2015-10-24 15:01:47

标签: javascript angularjs protractor

在我的Angular代码中,我有一个长轮询的代码,看起来像这样

var request = function() { 
    $http.post(url).then(function(res) {
        var shouldStop = handleData(res);
        if (!shouldStop()) {
            request()
        }
     };
}
request();

在页面加载后立即调用该函数。

但是,现在我正在尝试在Protractor中设置测试,我收到了此错误消息

  

失败:等待Protractor在11秒后与页面同步超时。请参阅   https://github.com/angular/protractor/blob/master/docs/faq.md。以下任务尚未完成:

docs中,我阅读了以下内容:

  

在执行任何操作之前,Protractor要求Angular等待页面同步。这意味着所有超时和http请求都已完成。如果您的应用程序不断轮询$ timeout或$ http,它将永远不会被注册为完全加载。你应该使用$ interval服务(interval.js)来连续轮询(在Angular 1.2rc3中引入)。

如何修改代码以使用$interval?我认为该区间是window.setInterval的角度包装器,我不知道如何使用它来进行长轮询。

1 个答案:

答案 0 :(得分:0)

哦,文档中的$interval内容属于$timeout,而不属于$http

好吧,我会抛弃Angular的$http,只使用fetch(加上$rootScope.$apply和JSON反序列化)来做同样的事情