我使用jQuery运行一些ajax:
var stuff = {};
function do_stuff(thing){
stuff[thing.id] = thing;
}
function fun(){
var calls = [];
for(var i = 0; i < 10; i++){
var call = $.get(URL, function(data){
do_stuff(data);
});
calls.push(call);
}
$.when(calls).done(function(){
console.log(stuff);
});
}
我使用的是$.when
,但我获得的是{}
而不是我期望的数据。当我在Chrome中设置断点时,log
行会在任意do_stuff
次调用之前被调用 - 显然,调用的顺序会混淆。有没有办法可以确保在我的get回调之后console.log(stuff)
行被称为?
答案 0 :(得分:0)
您应该阅读延迟对象:http://api.jquery.com/category/deferred-object/
您使用$.when
时更正,但接受延迟对象的参数。所以实际上你需要像$.when(calls[0], calls[1], ...)
这样的东西。这有点麻烦,所以幸运的是可以使用javascript函数.apply
并得到类似的东西:
$.when.apply(null, calls).done(function() {
console.log(stuff);
}