0

このコードに問題があります。関数が動作しているときに赤い背景を表示しようとしていますが、(そのときだけ) 背景を緑に変更しています。

次のアラートがコメントされていない場合、しばらく赤い背景が表示され、その後緑が表示されます (これが私の望みです)。

しかし、そのアラートにコメントすると、赤い背景が設定されていないようで、processData が終了すると、背景は正しく緑に設定されます。

誰かこの謎を解いてくれませんか? ありがとう!

function beforeProcess(params){
    $('#result').css('background','red');
    alert('now i start waiting, while background is red');
    $.when(processData(params)).done(
        $('#result').css('background','green')
    );
}


function process(params){
     //This function takes some time, and it makes (indirectly) some synchronous ajax calls (async:false)
}
4

2 に答える 2

0

私の推測では、関数「プロセス」はすぐに返されます... JS のすべての関数呼び出しは非同期で実行されることに注意してください。処理中に進行状況を表示したり、何らかの状態 (赤色) を表示したい場合は、すべてのサブ関数が終了した後に関数プロセスが戻ることを確認する必要があります。今のところ、標準のコールバックを使用することしか考えられません。

$.when は、遅延オブジェクトで使用すると便利です。使用する関数が遅延オブジェクトでない場合、「完了」はすぐに実行されます。次の " http://api.jquery.com/jQuery.when/ "からの抜粋を見てください。解決された Deferred として扱われ、アタッチされた doneCallbacks はすぐに実行されます。」

お役に立てれば

于 2013-09-17T17:58:17.420 に答える