10

我有两个 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 回答
1

我认为的问题$.each是返回您的dataArray,而不是Deferred您想要提供的对象列表$.when

于 2011-04-06T22:01:01.473 回答