等待几个骨干模型使用$ .when.apply保存

时间:2019-05-31 12:28:12

标签: jquery backbone.js backbone-model

我正在尝试保存几个骨干模型(不在集合中),并在它们全部保存后执行代码。

这是我的简化代码:

var requestsArray = modelsArray.map(function(model) {
    return model.save();
});

$.when.apply(undefined, requestsArray)
    .done(function() {
        console.log('DONE CALLBACK');
        console.log('ARGS', arguments);
     })
    .fail(function() {
        console.log('FAILED');
        console.log('ARGS', arguments);
    });

但是当我运行此命令时,done回调会立即被触发,它不会等待ajax请求完成。

那是为什么?

1 个答案:

答案 0 :(得分:1)

请求不是直接发生:(

我必须这样做:

var deferredsArray = modelsArray.map(function(model) {
    var dfd = new $.Deferred();
    model.save().then(function() {
          dfd.resolve();
        }, function() {
          dfd.reject();
        });
    return dfd;
});

$.when.apply(undefined, deferredsArray)
    .done(function() {
        console.log('ALL SUCCESSFUL');
    })
    .fail(function() {
        console.log('AT LEAST ONE FAILED');
    });

当所有方法都成功后,就会调用done的{​​{1}}方法。