gpt4 book ai didi

jQuery 延迟非 jQuery ajax

转载 作者:行者123 更新时间:2023-12-01 01:01:49 25 4
gpt4 key购买 nike

我有一个应用程序,我要从多个源提取数据,只有当所有数据都提取完毕后,我才想继续。我希望数据尽可能快,因此使用并行请求。

为了弄清楚所有请求何时完成,我这样做:

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.doAsyncbar.doAsync$.getJSON 请求是并行发生的,完成后,它们调用 getDataDone( ),这会增加一个计数器。如果计数器等于预期请求数,则运行回调。

在这种情况下如何应用 jQuery.deferred?代码按原样工作正常。使用 deferred 比我现有的有什么好处吗?

最佳答案

var d1 = $.Deferred();
foo.doAsync({
success: function (d) {
data.foo = d;
d1.resolve();
}
});

var d2 = $.Deferred();
bar.doAsync({
success: function (d) {
data.bar = d;
d2.resolve();
}
});

var json_deferred = $.getJSON("/api/", function (d) {
data.user = d;
getDataDone();
});

$.when(d1, d2, json_deferred).then(function() {
alert('all requests finished');
});

Is there any benefit to using deferred over what I have?

是的,延迟允许对应用程序流程进行更多控制,并且通常(本例也不异常(exception))提供更清晰的解决方案。

提示:如果您只需要回调中异步请求的结果而无需其他任何内容 - 您可以将结果传递给 resolve 调用,如 d1. solve(d); 然后将其作为 then() 回调的参数获取,而不是使用共享对象作为临时存储。

如果使用 getJSON(),您甚至可以省略回调:

var json_deferred = $.getJSON('/api/');

关于jQuery 延迟非 jQuery ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com