JavaScriptのコールバックがどのように機能するのでしょうか。私は具体的に非同期XmlHttpRequest
の仕組みを理解できません。どのようにJSは、サーバーが(1つのスレッドで)いくつかの値を返したと判断し、コールバックメソッドを呼び出すことができますか?それはタイマで構築されていますか?JSがコールバック関数を呼び出すタイミングを決定する方法
答えて
非常によく似た質問がhereとさらに詳細に回答されました。
基本的な答えは、着信ネットワークパケットが到着したときにスレッドまたは通知の種類が存在するOSレベルで、基礎となるネットワークが発生していることです。結果が完了すると、イベントがjavascriptイベントキューに追加されます。そのイベントがイベントキューの先頭に到達し、javascriptが動作する準備ができたら、適切なjavascript ajaxイベントがトリガされ、コールバックを呼び出すJavaScriptのチェーンが開始されます。
タイムアウトに時間がかかることがありますが、タイマーはajax応答がいつ到着したかを知るために使用されません。これは、ブラウザが使用するOSレベルのネットワークサポートに基づいています。
comlitely回答ありがとうございますが、このイベントはOSレベル(OS通知JSイベントキューの前)に登録されていますか?彼らは、ブラウザの新しいページが開いた後に実行されるスレッドに登録されていますか? – MyTitle
@Hello - 申し訳ありませんが、私はあなたの質問を理解していません。 javascriptエンジンは、ネイティブOSレベルのコードで実装されています。実装では、ネットワーキングにOSレベルの機能をすべて使用することは自由です。ブロッキングスレッド、ソケット通知などを使用することができます。 – jfriend00
あなたは他の質問で答えました:「Ajax応答が行われると、いくつかのネイティブコードが完了し、イベントをJSキューに入れることがわかります。しかし、ネイティブコードが登録されたイベントに関する情報を保持する場所はどこですか? – MyTitle
タイマーは、トリガーするタイミングを特定できないため使用できません。
私はそれが何らかのスタック/キュー[リストまたはテーブル]を使用して、呼び出しを追跡し、返された情報に応じて応答機能をポップして、応答している要求を伝えていると思います。
JavaScriptは環境内で動作します。その環境はシングルスレッドではありません。 xhrがブラウザを返すと(環境)、xhrが返されたことをjavascriptエンジンに通知し、それがコールバックを実行します。また、ユーザーのためのjavascriptのプログラミングモデルがシングルスレッドであっても、javascript自体はそうである必要はありません。現時点でを実行一切のjavascriptがありませんたび
ありがとうございます。しかし、これを理解するには: "ユーザーのためのJavaScriptのプログラミングモデルがシングルスレッドであっても、javascript自体はそうである必要はありません。" JS自体はどのようにマルチスレッド化できますか?それは本質的にsinglethreaded場合 – MyTitle
は、2つの部分がjavascriptにあります。あなたが使っている部分であり、スレッディングは公開されていません。次に、あなたのコードを実行するjavascriptインタプリタがあります。その部分はねじ切りすることができます。 – hvgotcodes
は、基本的には...
、XmlHttpRequestのにのsetTimeoutと回答からトリガイベントがチェックされます。実際にはイベントキューに追加されます。
この興味深い効果は、javascriptが(現在)が実行されている限り、これらのようなイベントは決して引き起こされないということです。
XmlHttpRequest
の非同期性は、(ブラウザによって)javascriptよりも低いレベルで提供されます。コールバック関数は、要求が完了したjavascriptエンジンへのブラウザのシグナリングによって開始されます。
hm ...言い換えれば、このイベント(xhrコールバック、タイマーコールバック、マウスリスナーなど)は、ブラウザのキューやブラウザのシグナルにJSエンジンに組み込まれています。 – MyTitle
- 1. ランダムに関数を呼び出すタイミングを決定する最良の方法
- 2. OnClickイベントがjs関数とコールバック関数を呼び出す
- 3. 一定時間後にコールバック関数を呼び出す方法
- 4. Webpackプラグイン - doResolveを呼び出すタイミングとコールバックを行うタイミング
- 5. JSコールバックでjqueryプラグイン関数を呼び出す
- 6. PhantomJS onLoadFinishedコールバック関数を呼び出す
- 7. モーダルからコールバック関数を呼び出す方法
- 8. nodejsのコールバック内で外部関数を呼び出す方法
- 9. Typescript:コールバックでJavascript関数を呼び出す方法
- 10. formValidationプラグインで検証コールバック関数を呼び出す方法は?
- 11. javascript関数の呼び出しタイミング
- 12. Simpy - 歩留まりを使用するタイミングと関数を呼び出すタイミング
- 13. コールバック関数から呼び出す
- 14. 解決方法から関数を呼び出すには?
- 15. Ajax関数のコールバックを別の関数で呼び出す方法
- 16. HTMLでJS関数を呼び出す方法
- 17. 別のJSファイルからJavascript関数を呼び出す方法
- 18. 10秒ごとにJS関数を呼び出す方法
- 19. ノードjsで共通関数を呼び出す方法
- 20. カルーセルのAngular JSでJavaScript関数を呼び出す方法
- 21. aspネットページからjs extern関数を呼び出す方法
- 22. C#wpfからjs関数を呼び出す方法
- 23. ノードjsで関数を呼び出す方法は?
- 24. .jsファイルのコードビハインドで関数/メソッドを呼び出す方法は?
- 25. イベントなしでjs関数を呼び出す方法
- 26. html上でJS関数を呼び出す方法は?
- 27. 動的に任意のjs関数を呼び出す方法
- 28. PHPでjs関数を呼び出す
- 29. Icefacesでjs関数を呼び出す
- 30. JS関数onClickを呼び出す
これに近いです:http://stackoverflow.com/questions/7575589/how-does-javascript-handle-ajax-responses-in-the-background/7575649#7575649 – jfriend00