0

次のような場合に、複数の ajax 呼び出しを渡すことができます。

var dnldAy = [];
for (i=0, iMax=urlsToLoad.length; i < iMax; i++) {
    dnldAy.push( $.ajax({
        url: urlsToLoad[i],
        dataType: "json"
    }) );
}

$.when.apply($, dnldAy).done( function( doneCb ) {
    console.log( doneCb );
}

実行すると、ajax リクエストの配列から最初のdoneCbwhenのみが取得されます。done 関数にパラメータを追加して他のコールバックを取得できることは理解していますが、これは拡張できません。(私は未知の数の ajax 呼び出しを自分の で行う予定なので、done 関数で必要なパラメーターの数を前もって知ることはできません)。when

この設計上の問題を処理する正しい方法は何ですか?

4

1 に答える 1

3

jQuery.when() のドキュメントの最初の例は、個々の promise の引数にアクセスする方法を示しています。

ただし、未知の数のプロミスにアプローチする方法については触れていません。追加の知識はほとんど必要ありません。つまり、関数の引数が配列のようなオブジェクトargumentsで使用可能になり、次のようにループできます。

$.when.apply($, dnldAy).done( function() {
    for(i=0; i<arguments.length; i++) {
        var doneCb = arguments[i];
        console.log( doneCb );
    }
}

それぞれdoneCbは、対応する promise が解決された値を含む配列になります。

于 2013-05-10T03:41:57.763 に答える