2017-08-11 10 views
0

$ .ajax()でdone()を使用する方法について、さまざまな記事を読んでいます。私が理解するように、ajaxは約束を返します。done()は完了時に実行する必要がありますが、each()ループでは最初のajax関数に達すると2番目のループが開始しますループはまだ処理中です。私の望ましい結果があるeach()をajax()done()と同時に処理する

https://jsfiddle.net/kLja50xa/1/

:ここ

は、問題の基本的なjsfiddleある

1-1 2-1 1-2 2-2

私は配列に要求をプッシュするためのオプションを試してみましたが、これは、同じ問題でより多くのネストされたeach()ajax()ループを意味しますか?

これらを順番に処理する必要があるのは、ループ内の一部のインスタンスにユーザー入力が必要なためです。

私はasync:falseを使用して必要な結果を強制することができます。明らかな理由から私はこれを避けたいと考えています。また、これはスクリプトに追加の影響を与えます。これにより、プロセスがどこにあるのかをユーザーに知らせる追跡メッセージをターゲットにして更新することはできません。

+1

再び呼び出されるまで、あなたが順序を強制する場合は、あなただけ一度にすべての非同期要求を発射することはできませんそのコードを一時停止する機能です。 – Phylogenesis

+0

@Phylogenesis - 私はそれらを一斉に発射したくないので、最初の結果が受け取られたら、done()を使って次の要求を発射しています。これを行う方法の提案はありますか? – n00bstacker

答えて

1

私はアヤックスがeachArray(配列)

fiddle

を完了したら、自己それを呼び出す機能を使用してみてください....ループでは可能であるとは思いません。

function eachArray(array){ 
    $i++; 
    console.log('1-'+$i); 
    ajax.done(function() { 
    console.log('2-'+$i); 
    if($i<array.length){ 
     eachArray(array); 
    } 
    }) 
} 

別ES6クールな機能がgeneratorsを使用することは、実際にあなたが

+0

非常に簡単です!ありがとうございます! – n00bstacker

関連する問題