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

zvokhttg  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(128)

我试图保存几个 Backbone.js 模型(不在集合中),并在它们都保存后执行代码。
这是我的代码简化:

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 请求完成。
为什么会这样呢?

eni9jsuy

eni9jsuy1#

它不会直接发生在请求中:(
我只好这样做:

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');
    });

当所有操作都成功时,$.whendone方法将被调用。

相关问题