我有一个函数来获取一些数据,函数应该返回一个promise。在函数中,我必须一个接一个地提出2个请求。我最终得到了一个嵌套的deferrer调用,其中函数将返回的延迟器上的最后一次调用resolves
。我是这个推迟的东西的新手,并想知道这是否是正确的解决方案。
function getData(func) {
var model = new Model();
var collection = new Collection();
var dfd = new jQuery.Deferred();
collection.fetch().then(function () {
model.fetch().then(function () {
dfd.resolve(collection);
});
});
return dfd.then(function (collection) {
return getViews(func(collection), model);
});
}
答案 0 :(得分:5)
如果通话顺序无关紧要,我建议使用http://api.jquery.com/jQuery.when
使用when
,您可以进行并行xhr请求。
答案 1 :(得分:5)
$.Deferred()
而且没有需要传递collection
(func()
除外),因为它仍然在范围内。
据我在问题中的代码中可以看出,以下内容应该有效:
function getData(func) {
var collection = new Collection();
var model = new Model();
return $.when(collection.fetch(), model.fetch()).then(function() {
return getViews(func(collection), model);
});
}