【发布时间】:2013-03-29 12:00:00
【问题描述】:
我有一个应用程序,我从多个来源提取数据,并且只有在提取所有数据时,我才想继续。我希望数据尽可能快,所以使用并行请求。
为了弄清楚所有请求何时完成,我这样做:
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 有什么好处吗?
【问题讨论】:
标签: jquery ajax jquery-deferred promise