2017-09-20 6 views
1

私は3分のタイムアウトを実行しています。そのタイムアウトでは、特定のdurationsで別の関数を実行しています。関数はまだ実行されています。これは私のコードです

$scope.time = 180000; 
var timer = function() { 
    if ($scope.time > 0) { 
     $scope.time -= 1000; 
     var durations = [170000, 150000, 130000, 110000, 90000, 70000, 50000, 30000, 10000]; 
     if (durations.includes($scope.time)) { 
      dataService.acceptNotify(payload).then(function(response) { 
       console.log(response); 
       if (response.data.success === true) { 
        $mdToast.showSimple(response.data.msg); 
        $mdDialog.hide(); 
        $timeout.cancel(timeout); 
       } 
      }) 
     } 
     $timeout(timer, 1000); 
    } else { 
     $mdDialog.hide(); 
    } 
} 
var timeout = $timeout(timer, 1000); 
+0

あなたのタイムアウトをキャンセルした直後に、参照番号 – dev8080

+0

@ dev8080を保存せずにそれを元に戻します。私はカウントダウンタイマーを作成しました。その$ timeout(timer、1000)を呼び出す必要があります。内部では –

+1

を実行し続けますが、タイムアウトをキャンセルすると、ループ内で開始する変数ではなく、変数 'timeout'内のタイムアウトだけがキャンセルされます。 – dev8080

答えて

2

あなたは変数にタイマーインスタンスをキャプチャしておらず、キャンセルしていません。

はあなたのコードでは、この行を変更してみてください:

timeout = $timeout(timer, 1000); 
0

私はタイムアウトが起こっていると信じていますが、それを観察することはできません。私はあなたがこのコード

var timeout = $timeout(timer, 1000); 

で1秒毎の後に機能タイマを呼んでいるが、あなたは応答APIを取得した後、それをキャンセルしていると、その間に多くの時間を呼び出しますされ始め、多くのインスタンスがあっただろう参照してください。実際にはキャンセルしていますが、数回してからです。 たとえば、20秒後に応答を受け取った場合、コードがそうであるようにapiを20回呼び出した後で応答がキャンセルされます。 あなたが上の操作を教えてくれたら、正しいコードを教えてください

+0

私はカウントダウンタイマーが0にカウントダウンし、その3分の時間の間に、私はapiを呼び出してserver.Ifイベントが正常にそこに発生した場合、私はresponse.dataを取得します。成功=真、そしてそれが起こるとき、私はそのタイマーを止めたいと思う。私は適切に説明することができましたか? –

0

$timeout(timer, 1000); 

をちょうどあなたが他のブロックの上に使用しているコードの下に削除します。

$timeout(timer, 1000); 

それはあなたのために働くでしょう。

関連する問題