違いがちょっとわかりません非同期呼び出しそしてコールバック。
私はこの投稿を読んでコールバックについて教えるしかし、どの回答も非同期呼び出しとの違い。
これですかコールバック=ラムダ式?
コールバックは別のスレッドで実行されていますか?
誰かこれを簡単な英語で説明できますか?
ベストアンサー1
簡単に言えば、コールバックは非同期である必要はありません。
http://docs.apigee.com/api-baas/非同期呼び出しと同期呼び出し
- 同期:
API 呼び出しが同期的である場合、コード実行は API 呼び出しが返されるまでブロック (または待機) されてから続行されます。つまり、API から応答が返されるまで、アプリケーションはそれ以上実行されず、ユーザーはアプリの遅延またはパフォーマンスの遅れとして認識する可能性があります。ただし、API 呼び出しを同期的に行うことは、API 応答を受信したときにのみ適切に実行されるコードがアプリ内にある場合は、有益です。
- 非同期:
非同期呼び出しは、API 呼び出しがサーバーから返されるまでブロック (または待機) しません。プログラムの実行は継続され、呼び出しがサーバーから返されると、「コールバック」関数が実行されます。
Java、C、C# では、「コールバック」は通常、(「メイン イベント ループ」に対して)同期的です。
一方、JavaScriptでは、コールバックは通常非同期- 呼び出される関数を渡しますが、コールバックが呼び出されるまで他のイベントは処理され続けます。
どの Javascript イベントがどの順序で発生するかを気にしないのであれば、問題ありません。そうでない場合は、Javascript で非同期動作を管理するための非常に強力なメカニズムの 1 つとして、「promise」を使用する方法があります。
http://www.html5rocks.com/en/tutorials/es6/promises/
PS: 追加の質問にお答えします:
はい、コールバックはラムダになる場合がありますが、必須ではありません。
Javascript では、ほぼすべてのコールバックは「匿名関数」(基本的には「ラムダ式」)になります。
はい、コールバックは別のスレッドから呼び出される場合がありますが、これは必須ではありません。
コールバックは(多くの場合)スポーンスレッド(したがって、それ自体が「非同期」になります)。
====================================================================
Q: @paulsm4 実行フローでコールバックと非同期呼び出しがどのように機能するかを例を挙げて詳しく説明していただけますか? とても助かります
- まず、「コールバック」の定義について合意する必要があります。良い定義は次のとおりです。
https://en.wikipedia.org/wiki/コールバック_%28コンピュータプログラミング%29
コンピュータプログラミングでは、折り返し電話は、他のコードに引数として渡される実行可能コードであり、都合の良いときに引数をコールバック(実行)することが期待されます。呼び出しは、同期コールバック、または後で起こるかもしれない非同期コールバック。
また、「同期」と「非同期」も定義する必要があります。基本的に、コールバックが呼び出し元に戻る前にすべての作業を実行する場合、それは「同期」です。呼び出された直後に呼び出し元に戻ることができ、呼び出し元とコールバックが並行して動作できる場合、それは「非同期」です。
同期コールバックの問題は、それが「ハング」しているように見えることです。非同期コールバックの問題は、「順序」を制御できなくなる可能性があることです。つまり、「A」が「B」の前に発生することを必ずしも保証できないのです。
コールバックの一般的な例は次のとおりです。
a) ボタン押下ハンドラ (それぞれの「ボタン」には異なる「応答」があります)。これらは通常、「非同期」で呼び出されます (GUI のメイン イベント ループによって)。
b) ソート「比較」関数 (共通の「sort()」関数で異なるデータ型を処理できるようにするため)。これらは通常、「同期的に」呼び出されます (プログラムによって直接呼び出されます)。
具体的な例:
a) 「print()」関数を備えた「C」言語プログラムがあります。
b) 「print()」は、「PrintHP()」、「PrintCanon()」、および「PrintPDF()」の 3 つのコールバックのいずれかを使用するように設計されています。
c) 「PrintPDF()」はライブラリを呼び出してデータを PDF でレンダリングします。これは同期的であり、.pdf のレンダリングが完了するまでプログラムは「print()」から戻りません。通常は非常に高速に実行されるため、問題はありません。
d) 物理プリンタへの I/O を実行するスレッドを生成するために、「PrintHP()」と「PrintCanon()」をコーディングしました。スレッドが作成されるとすぐに「Print()」は終了し、実際の「印刷」はプログラムの実行と並行して行われます。これら 2 つのコールバックは「非同期」です。
Q: 分かりましたか? それは役に立ちますか?