2017-10-01 10 views
0

$timeoutを実行した後にキャンセルすることはできますか?通常、私が見るものはあなたがこのよう$destroyであなたの$timeout年代をキャンセルする必要があることを言って人です:

var timeout = $timeout(function() { 
    // stuff 
}); 

$scope.$on("$destroy", function(){ 
    $timeout.cancel(timeout); 
}); 

しかし、それは代わりに、これを実行しても大丈夫です。

var timeout = $timeout(function() { 
    // stuff 
    $timeout.cancel(timeout); 
}); 
+0

"is it OK"コードは、すでに実行された後にタイムアウトをキャンセルしようとします。その時点でキャンセルするものはありません。 '$ destroy'イベントハンドラの中で取り消すポイントは、破壊後に未処理のスケジュールされたタイムアウトが実行されないようにすることです。 – nnnnnn

+1

あなたがしていることは意味をなさない、私はあなたがそのような間隔などを探していると思う、それは意味をなさないかもしれない。タイムアウトは、指定された秒数で関数を実行します。その関数の中で、コードは空の行またはreturn文と同じように有効です。 – pegla

+0

ありがとう@nnnnnnとpegla。意味をなさない – joeygrimes

答えて

0

DOM要素がある場合にはページから削除されました AngularJSはスコープの の$ destroyイベントをトリガーします。これにより、保留中のタイマ がキャンセルされる可能性があります。

$ timeout()は約束オブジェクトを返します。このオブジェクトはタイムアウトをキャンセルする$ timeout.cancel()関数に供給することができます。

$scope.$on('$destroy', function(){ 
    $timeout.cancel(promise); 
}); 
関連する問題