私には2つの機能があります。2番目のものは最初のものよりも高速ですが、関数はどのようにして最初のものの作業を完了するのを待つことができますか?
function1(); // slow
function2(); // fast
私には2つの機能があります。2番目のものは最初のものよりも高速ですが、関数はどのようにして最初のものの作業を完了するのを待つことができますか?
function1(); // slow
function2(); // fast
JavaScriptは必須であり、シングルスレッドであり、このように機能します。function2()
終了するまで開始しませんfunction1()
。
遅いということは、AJAXを介して外部サービスを非同期的に呼び出すことを意味する場合、私たちは話しているのです。非同期リクエストが終了したときに呼び出されるfunction1()
ように、ある種のコールバックを提供する必要があります。function2()
function1(function2);
実装は簡単です。たとえば、jQueryを使用します。
function function1(callback) {
$.ajax({url: 'some-url'}).done(callback);
}
AJAXリクエストを使用している必要があります。したがって、ajaxの完了後、次のようなコールバック関数を呼び出します。
function1 = new function(callback) {
$.ajax({...}).done(callback());
}
function1(function2);
明らかなコールバックアプローチとは別に、関数を非同期で呼び出す場合、それらの順序付けはイベントフレームワークに基づくことができます。function1をハンドラーとして使用してイベントリスナーを追加し、function2内でそのイベントをトリガーできます。
次々に関数を呼び出すと、遅いか速いかのどちらかで最初の関数が終了します。