一尘不染

解决所有延迟的对象后,引发jquery deferred.then()

ajax

我有两个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);
}

阅读 236

收藏
2020-07-26

共1个答案

一尘不染

正如Eli指出的那样,$ .when()接受用逗号分隔的参数列表,而不是数组。使用Function.apply()传递数组似乎可以解决问题。

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

    $.when.apply(window, deferreds).then(callback);
}
2020-07-26