以一段时间间隔呼叫和停止休息服务

时间:2017-07-06 09:45:37

标签: javascript angularjs

我需要每x秒间隔(3000毫秒)进行一次休息调用,以查询网络服务的状态,直到我得到想要的结果或直到12次(例如)或我收到预期的状态:

function myFunction() {
    var i=0;
    var _onSuccess = function(response) {
        if (response.status=== 'READY' || i >= 12) {
            clearInterval(x);
            if(response.status !== 'READY') {
                $location.path('/errorView');
            }
        }
    }
    var x = setInterval(function () {
       $rest.getSomething(_onSuccess)
    }, 3000);
}

我有另一个函数调用myFunction超时,因为如果我在32秒后没有收到预期结果,我想取消停止休息调用并转到错误视图。

function myFunction2() {
    myFunction();
    $timeout(function () {
        $location.path('/routeWhenStatusReady');
    }, 32000); 
}

有没有办法改善这个?我想完成超时myFunction2,如果Ready状态在16秒内正常,例如不等待32秒......

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以在变量中设置$ timeout:

var myTimeout = $timeout

并完成:

$timeout.cancel(myTimeout);

答案 1 :(得分:0)

$timeout计时器存储在全局范围内,myFunction可以访问该范围。并在达到所需结果时取消计时器。

var timer=null;

function myFunction(){
var i=0;
    var _onSuccess = function(response){
        if (response.status=== 'READY' || i >= 12) {
            clearInterval(x);
            if(timer){
              $timeout.cancel(timer);
            }
            if(response.status !== 'READY'){
                $location.path('/errorView');
            }
        }
    }
var x = setInterval(function () {
            $rest.getSomething(_onSuccess)
        }, 3000);
}

function myFunction2(){
      myFunction();
      timer = $timeout(function () {
        $location.path('/routeWhenStatusReady');
      }, 32000); 
   }

答案 2 :(得分:0)

第1步:

  

将$ interval分配给变量

 var timeHandler = $interval(() => {
                // your code
 }, 1000) };

第2步:

  

并在间隔取消功能

中传递变量时取消它
$interval.cancel(timeHandler);

参考:here