3

私には2つの機能があります。2番目のものは最初のものよりも高速ですが、関数はどのようにして最初のものの作業を完了するのを待つことができますか?

function1(); // slow 

function2(); // fast
4

4 に答える 4

4

JavaScriptは必須であり、シングルスレッドであり、このように機能します。function2()終了するまで開始しませんfunction1()

遅いということは、AJAXを介して外部サービスを非同期的に呼び出すことを意味する場合、私たちは話しているのです。非同期リクエストが終了したときに呼び出されるfunction1()ように、ある種のコールバックを提供する必要があります。function2()

function1(function2);

実装は簡単です。たとえば、jQueryを使用します。

function function1(callback) {
  $.ajax({url: 'some-url'}).done(callback);
}
于 2012-10-27T12:11:18.783 に答える
1

AJAXリクエストを使用している必要があります。したがって、ajaxの完了後、次のようなコールバック関数を呼び出します。

function1 = new function(callback) {
    $.ajax({...}).done(callback());
}

function1(function2);
于 2012-10-27T12:11:50.840 に答える
1

明らかなコールバックアプローチとは別に、関数を非同期で呼び出す場合、それらの順序付けはイベントフレームワークに基づくことができます。function1をハンドラーとして使用してイベントリスナーを追加し、function2内でそのイベントをトリガーできます。

于 2012-10-27T12:17:19.643 に答える
-1

次々に関数を呼び出すと、遅いか速いかのどちらかで最初の関数が終了します。

于 2012-10-27T12:12:03.653 に答える