所以,我的代码看起来像
for(int n = 0; n < object.length; n++){
/*Other code */
$.get(...,function(data){
//do stuff
});}
现在,其他代码执行多次,就像它应该的那样。但是,当运行get命令时,它只运行一次,即当n到达object.length时。这会导致各种错误。 n仅在for循环中递增。
你能不能循环获取/发布命令吗?或者,如果可以,做错了什么?感谢。
答案 0 :(得分:4)
for循环不会等待$.get
调用完成,因此您需要在此周围添加一些异步流控制。
结帐async.eachSeries。下面的done
回调是控制循环的关键。在每个$.get
请求成功/失败后,您调用done();
(如果出现错误,请致电done(someErr);
)。这将使数组迭代器前进并移动到循环中的下一个项目。
var async = require("async");
var list = ["foo", "bar", "qux"];
async.eachSeries(list, function(item, done) {
// perform a GET request for each item in the list
// GET url?somevar=foo
// GET url?somevar=bar
// GET url?somevar=qux
$.get(url, {somevar: item}, function(data) {
// do stuff, then call done
done();
});
}, function(err) {
if (err) {
throw err;
}
console.log("All requests are done");
});
答案 1 :(得分:1)
您是否希望所有获取请求同时或一个接一个地完成?
您可以使用forEach循环一次完成所有操作。 forEach比普通for循环更好,因为它在每次迭代中为您提供了elem
和n
的新实例。
object.forEach(function(elem, n) {
/*Other code */
$.get(...,function(data){
//do stuff
});
});
但是如果你想一个接一个地做这些请求,你就可以这样做。
(function loop(n) {
if(n >= object.length) return;
/*Other code */
$.get(...,function(data){
//do stuff
loop(n + 1);
});
})(0);