我正在尝试保存几个骨干模型(不在集合中),并在它们全部保存后执行代码。
这是我的简化代码:
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请求完成。
那是为什么?
答案 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}}方法。