10

私は2つのjavascript関数を持ってsave()おりsaveAll()、以下のように設定されています:

function save(data) {
    return $.post('/save', data);
}

function saveAll(callback) {
    var dataArray = [];
    $.each(dataArray, function() {
        save(this);
    });
    callback();
}

saveAll()jquery 遅延オブジェクトを活用し、すべての操作が完了したらcallback関数を発生させるように変更することに興味があります。save()ただし、正確な構文はわかりません...特に $.when() 内の $.each() に関連しています。このようなものでしょうか?

function saveAll(callback) {
    var dataArray = [];
    $.when(
        $.each(dataArray, function() {
            return save(this);
        })
    ).then(callback);
}
4

3 に答える 3

21

Eli が指摘したように、 $.when() は配列ではなくコンマ区切りの引数リストを受け入れます。を使用Function.apply()して配列を渡すとうまくいくようです。

function saveAll(callback) {
    var dataArray = [], deferreds = [];
    $.each(dataArray, function() {
        deferreds.push( save() );
    });

    $.when.apply(window, deferreds).then(callback);
}
于 2011-04-06T23:25:12.060 に答える
1

遅延オブジェクトのカンマ区切りのリストを渡すことができ、それらがすべて解決されると実行されます$.when.then

http://api.jquery.com/jQuery.when/

于 2011-04-06T21:32:02.783 に答える