は、単純な角度のコントローラ内部に、このコードを、与えられた:予期しない結果
var s = $timeout(function() {
console.log(s);
}, 2000);
console.log(s);
$timeout(function() {
$timeout.cancel(s);
}, 1000);
だから我々は2秒で発生するはずの変数s
でタイムアウトを作成しています。それに1秒でタイムアウトがキャンセルされるので、決して発生しません。キャンセルする前に、コンソールにs
と記録します。ステータスコードが1であり、その値が未定義であることが予想されます。その代わりに、そのステータスは2であり、その値は「キャンセル」されています。どういうわけか、システムはタイムアウトをキャンセルする予定であることを事前に知っており、それに応じて調整します。
これはどうですか?私はオブジェクトs
の状態がの後にの$timeout.cancel(s);
の後になると期待します。私は確かに前にそれを期待していない。何が起きてる?
に設定参照してください。あなたが正しいです。 'console.log(s。$$ state.status);'は0を示し、オブジェクト全体を記録すると状態は2になります。 –
可能な重複:http://stackoverflow.com/q/11214430/398606、http: //stackoverflow.com/q/4057440/398606 ...私はそれが良い説明ではなかったので、私のコメントを削除しました。しかし、うまくいけば、これらの質問は役に立ちます:) –
確かにその質問に関連していますが、その人の問題はもはや現代のブラウザには存在せず、私はスピード/パフォーマンスの面で技術的制限と見なします。(2)尋ねたことは機能の制限ではなく、制限ではありません(Chromeのデベロッパーチームは、望むならば継続的なバインディングを無効にすることができます)。しかし、ありがとう! –