基于对StackOverflow的一些很好的引用,我知道在$.when()
请求完成后使用$.get
来触发某些事件。
但如果$.get
在for循环中呢?
for (i = 0; i < 5; i++) {
$.get()...
}
$.when().done(function(a){
}
所以我想我会将每个变量分配给一个数组:
var d = Array(5);
for (i = 0; i < 5; i++) {
d[0] = $.get()...
}
$.when(d).done(function(a){
...
}
但这似乎不起作用。建议的任何替代方案?或者我正在做一些接近正确的事情?
答案 0 :(得分:1)
不清楚你要问的是什么,但如果你想要汇总所有请求并在完成所有请求后执行一个回调,你就这样做:
在apply
上使用$.when
和一系列请求
var requests = [];
for(var i = 0;i < 5;i++) {
requests.push($.get(...));
}
$.when.apply(null,requests).then(function() { });
如果.then
没有被解雇,那是因为一个或多个$.get
请求失败了。试试这个:
$.when
.apply(null,requests)
.then(
function() { console.log('success'); },
function() { console.log('at least one failed'); }
);
答案 1 :(得分:0)
你能把done()放在for循环中吗?
for (i = 0; i < 5; i++) {
$.get().when().done(function(a){
...
}
}
或者更简单:
for (i = 0; i < 5; i++) {
$.get( url, function(a){
...
});
}
在这个例子中,'a'在每个回调实例中都是唯一的。
根据评论更新:
var accumulate; //outside the loop
for (i = 0; i < 5; i++) {
$.get( url, function(a){
accumulate += a;
});
}
异步http://caolan.github.io/async/docs.html#.parallel 的更新
var myTasks = [];
for (i = 0; i < 5; i++) {
myTasks.push( function( callback )
{
$.get( url, function(a){
callback( null, a);
});
}
}
async.parallel( myTasks, function( err, resultsArray )
{
// all done
// aggregate the array as you wish.
});