2017-07-06 17 views
1

希望の結果が得られるまで、または12回(たとえば)までウェブサービスのステータスを調べるには、xインターバル秒(3000ミリ秒)ごとに休憩をする必要があります。私は期待状態受け取るとき、または:一定時間間隔で休憩サービスを呼び出して停止する

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

を私は私が停止REST呼び出しをキャンセルし、エラービューに行きたい32秒後に期待される結果を受け取るいけない場合ので、タイムアウトでのMyFunctionを呼び出して別の機能を持っています。

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

これを改善する方法はありますか? Readyステータスが例えば16秒でOKで、32秒待たない場合は、myFunction2のタイムアウトを終了したい。

ありがとう!

var myTimeout = $timeout

をし、それを終える:

答えて

0

あなたは変数に$タイムアウトを設定することができ

$timeout.cancel(myTimeout);

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

ステップ1:

アサイン$間隔変数

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

ステップ2:

と変数を渡すことでほしいと思うときにそれをキャンセルin インターバルキャンセル機能ン

$interval.cancel(timeHandler); 

Refrence:here

関連する問題