1. ホーム
  2. javascript

[解決済み] Ajaxなどの非同期呼び出し時にコードを待機させる方法 [duplicate]

2022-12-21 14:12:13

質問

私はこのようなものを探しています。

function someFunc() {

callAjaxfunc(); //may have multiple ajax calls in this function
someWait(); // some code which waits until async calls complete
console.log('Pass2');

}

function callAjaxfunc() {
  //All ajax calls called here
  console.log('Pass1');

}

私が試したことは?

1 Jquery.when()

はそれを使用してみました.それはうまく動作します。しかし、私が望む方法ではない。 $.when は待ちますが、次のコードは $.when() の隣のコードは待たずに実行されます。内側のコード do callback の中のコードは、ajax呼び出しの後にのみ実行されます。

2. setTimeOut()でグローバルフラグを立てる。

これはうまくいくと確信していました。私は以下のように試してみました。

GlobalFlag = false;

function someFunc()     
    callAjaxfunc(); //may have multiple ajax calls in this function
    setTimeOut(waitFunc, 100); // some  which waits until async calls complete
    console.log('Pass2');
}

function callAjaxfunc() {
    //All ajax calls called here
    onAjaxSuccess: function() {
        GlobalFlag = true;
    };
    console.log('Pass1');    
}

function waitFunc() {
    if (!GlobalFlag) {
        setTimeOut(waitFunc, 100);
    }
}​

まだ、望んだ結果を得ることができません。私はここで何か間違ったことをしているのでしょうか?これは方法ではないのでしょうか?

このような結果になるはずです。

Pass1
Pass2

AJAX呼び出しが必要なため、何もできない。

編集 : 多くの人がコールバックを提案していたので、私はそれについて知っています。 somewait() の隣にあるコードが実行されます...私はブラウザが完全に somewait() の隣にあるコードの実行を完全に停止させたいのです。

どのように解決するのですか?

コールバックを使用する。サンプルコードに基づき、このようなものが動作するはずです。

function someFunc() {

callAjaxfunc(function() {
    console.log('Pass2');
});

}

function callAjaxfunc(callback) {
    //All ajax calls called here
    onAjaxSuccess: function() {
        callback();
    };
    console.log('Pass1');    
}

これは、以下のように表示されます。 Pass1 をすぐに表示し (ajaxリクエストに少なくとも数マイクロ秒かかると仮定して)、次に Pass2 が表示されたら onAjaxSuccess が実行されます。