私は、AngularJS httpを使用していくつかの(例えば4つの)Ajaxコールを作成している状況があり、コールバックを呼び出してカウンタを増やしたいので、スレッドが完了しました。ブラウザのJavaScriptで同時読み込み/書き込み読み書きの衝突が可能ですか?
JavaScriptはJavaの「同期」キーワードや「揮発性」キーワードに匹敵するものがないため、カウンタをインクリメントしている間に複数のスレッドが衝突し、インクリメントがいくつか失われる可能性があります。
つまり、2つのスレッドが同時に発生し、両方ともカウンタを読み取り、同じ値(たとえば100)を取得します。その後、両方のスレッドがそのカウンタをインクリメントし(101に)、新しい値を格納すると、見逃しています(102ではなく101)。
私はJavaScriptがシングルスレッドであることを知っていますが、例外もあります。
ブラウザでこのような状況が発生する可能性がありますか?その場合、それを防ぐ方法はありますか?
約束のためカウンターは必要ありません。 '$ q.all()'を見てください。 '$ http'は約束を返し、あなたは約束事をまとめて、完了したら完了します。 – charlietfl
AFAIRが私に起きたことはありませんでしたが、私は答えを待っています!良い質問! – shaheer
@mplungjan非常に遅い – shaheer