我有一个应用程序,我从多个来源提取数据,并且只有当所有数据都被拉入时,我才想继续。我希望数据尽可能快,所以使用并行请求。
为了弄清楚所有请求何时完成,我这样做:
function getData(cb) {
var count, data;
count = 0;
data = {};
function getDataDone() {
count++;
//only call callback when all async requests are done
if (count === 3 && cb) {
cb(data);
}
}
foo.doAsync({
success: function (d) {
data.foo = d;
getDataDone();
}
});
bar.doAsync({
success: function (d) {
data.bar = d;
getDataDone();
}
});
$.getJSON("/api/", function (d) {
data.user = d;
getDataDone();
});
} //end getData
getData(function (data) {
//application data loaded, do stuff
data.foo;
data.bar;
data.user;
});
foo.doAsync
,bar.doAsync
并且$.getJSON
请求发生是并行的,当完成时,它们会调用getDataDone()
,这会增加一个计数器。如果计数器等于预期的请求数,则运行回调。
在这种情况下如何应用 jQuery.deferred ?编码可以正常工作。使用 deferred 比我所拥有的有什么好处吗?