2012-04-11 17 views
0

jqueryの各関数で作業しています。終了する前に各ループの結果を必要とする関数に移動しているようですコードです。続行する前にそれぞれの処理が完了するのを待つ(jquery)

$.each(array, function(index, value) { 
    prob[value] = get_probs(value); 
}); 

sim(prob); 

function sim(prob){ 
    //alert ("test"); 
    alert (prob[value]); 
    new_sim(prob[value]); 
} 

アラート( "テスト")のコメントを外すと、ピースは明らかにアラートを表示し、2番目のアラートに適切な番号を表示しますが、そのまま残すと、定義されていない状態に戻ります。これは、各ループを終了する

とにかく、私は各ループが終了するまで実行するためにsim関数を待つことができますか?

注:これより多くのコードがありますが、私は単純化しようとしました...何かが不明な場合はお知らせください。私は結局、このような設定をしたい理由で、sim関数を複数回実行しようとしています。

ありがとうございました!

+6

私は 'get_probs'とか、他のコードがAJAXリクエストをしているとか、他の非同期アクションをしていると思います。 –

+0

そうです。私はちょうどそれを同期的に実行するように切り替えました(async:false)、それは動作しているように見えます。これを行う他の方法はありますか? –

+1

AJAXの応答に依存するコードはすべて、 'success:'コールバックから実行する必要があります。 1つのオプションは 'get_probs' *(AJAXがあると仮定)*に引数として関数を渡し*、コールバック内でその関数を呼び出して応答を渡すことです。それ以外の場合は、関数を渡す代わりに、コードをコールバックにハードコードするだけで済みます。 –

答えて

0

各ループは順番に実行する必要があります。終了するまで実行する必要はありません。このコードを実行する方法について

方法:get_probsの成功コールバック内

sim(prob); 

function sim(prob){ 
    //alert ("test"); 
    alert (prob[value]); 
    new_sim(prob[value]); 
} 

、同期AJAX呼び出しが答えになることはありません。

+1

また、すべての目的と目的のためにJavaScriptがシングルスレッドなので、迷子になることを心配する必要はありません(Ajaxは別に呼び出します) –

+0

この場合を除いて、 'get_probs'関数はAJAXコールするので、各ループは非常に迅速に(AJAX呼び出しを開始します)、AJAX呼び出しが戻る前に 'sim()'を実行します。 –

+0

ya、上記のように、get_probsにajax呼び出しがあります。私はasync:falseに設定して動作しますが、これはブラウザを2〜2秒間ロックするので理想的ではありません。別の方法がありますか? –

関連する問題