関数があるとしましょう。
function kevin(cb){
//Ok then, so async stuff here, then, when done,
cb(1); <== reply;
}
次に:
....
kevin(x=> console.log(x));
次にkevin()
、上記の呼び出しが応答を受信する前に、別のブロックが呼び出します。
kevin(y=> console.log(y));
上記のように、JavaでしばらくJavaを使用した後、これらのコールバックがJavaインターフェイスでありkevin
、最初の呼び出しが返される前に2番目の呼び出しが発生した場合、2番目の呼び出しが最初の呼び出しをオーバーライドし、 2番目のみが返さcomposite pattern
れ、メソッドが完了したときにすべてのコールバックが記録され、実行されることを確認する必要があります。
しかし、Javascriptでは、エラーは発生せず、すべてが機能し、呼び出すすべての関数コールバックが呼び出さkevin()
れます。
私はこれをAngularでtypescriptを使って行っています。したがって、上記は実際にはクラスのメソッドです。
後続の関数呼び出しは、以前の関数呼び出しを置き換えることはありません。関数内で非同期イベントが待機している場合、待機ごとにイベントループで新しいコールバックがスケジュールされます。簡単な例:
setTimeout(() => console.log(1));
setTimeout(() => console.log(2));
setTimeout(() => console.log(3));
3つのコールバックはすべて、それぞれの値で起動します。
干渉を受けるのは、変数を共有している場合のみです。
let foo = 'bar';
setTimeout(() => console.log(foo));
setTimeout(() => foo = 'baz', 500);
setTimeout(() => console.log(foo), 1000);
共有foo
が別のコールバックで操作されていることに気付いていない場合、最後のコールバックの結果は期待したものである場合とそうでない場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加