JavaScriptはシングルスレッドであることを理解していますが、JavaScriptでの非同期イベント処理の理解を確認したいと思います。さらに重要なことは、潜在的な競争条件にさらされていないことを確認することです。JavaScriptイベント処理の競合条件?
は概念的には、当社のモバイルアプリは、このように動作します:モバイル・ページがロードされたときに我々は機能foo
を呼び出す
。
foo
の終わりカウンタが
0
より大きい場合、我々は、(1秒の遅延で)再びfoo
を呼び出すためsetTimeout
を使用します。カウンタが0
にヒットした場合は、新しいページを読み込みます。タイムアウトは変数に保存されます。ボタンをタップすると、関数
do_tap
が呼び出され、手順2で保存されたタイムアウト変数がクリアされます(その他のことも行います)。
do_tap
とfoo
同じページ要素を更新し、我々は、彼らがお互いにステップしないことを確認したいの両方。
質問:
タップは
foo
の実行中に発生したと仮定します。ブラウザdo_tap
はfoo
の終了後に実行を開始しますか?つまり、foo
が起動すると、foo
とdo_tap
がインターリーブされることはありません。タップが最初に発生する場合はどうなりますか?
do_tap
は、foo
が開始する前に完了することが保証されています。
実行がシングルスレッドであるため、 'Do_tap'が返される前に' foo'が実行を開始することは不可能です(その逆もあります)。この記事を読んで、ブラウザの実行キューの仕組みを理解できます:http://ejohn.org/blog/how-javascript-timers-work/ –