3

初めて使用$.whenするので、構文に問題があります。
以下の単純化された例に似たコードがあります。それは機能します(単純化したときにエラーが発生しなかった場合)。customerIds私の問題は、配列に含まれる多くの要素がわからないことです。

var customerIds = new [1, 2, 3];

$.when(
    getCustomerData(customerIds[0]),
    getCustomerData(customerIds[1]),
    getCustomerData(customerIds[2])
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});

function getCustomerData(int id) {
    return new $.Deferred(function(defer) {
                    doSomeWork(id, defer);
    }).promise();       
}

$.when次のようにステートメントを書きたいのですが、構文を正しくするのが難しいです。

$.when(
    getCustomerDataCalls(customerIds),
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});

getCustomerDataCallsは次のように実装されています。

function getCustomerDataCalls(customerIds) {
    var dfds = [];

    for (var id in customerIds) {
        dfds.push(new $.Deferred(function(defer) {
                                    doSomeWork(id, defer);
                                 }).promise());     
    }

    return dfds;
}

残念ながら、実装に問題があり、どこが間違っているのかわかりません。Deferred私の最善の推測は、 sの配列を返すときに何かがうまくいかないということです

更新:
lanzz が私の不自然な例は既に Deferred を返すと述べた後、コードを更新しました。doSomeWork

4

1 に答える 1

15

はい、私もこれに出くわしましwhenた。配列を渡すことは簡単ではありません。applyただし、目的の結果を達成するために使用できます。

$.when.apply($, getCustomerDataCalls(customerIds))
于 2012-06-05T08:07:43.123 に答える