如何在javascript循环中强制同步?
这是没有同步的:
$.each(data, function(index, value) {
alert(index + ': ' + value);
});
同步尝试:
var time = 500;
$.each(data, function(index, value) {
setTimeout(alert(index + ': ' + value), time);
time += 500;
});
但到目前为止它所做的只是连续运行警报,没有间隔
这是我需要在队列中运行的ajax请求:
$.each(data, function(key, val) {
$.ajax({
url: 'ajax/getPerson.php',
type:'post',
dataType: 'json',
data: { 'dude' : val["idG"] },
success: function(data) { createHTML.person(data) }
}
答案 0 :(得分:2)
试试这个:
var time = 500;
$.each(data, function(index, value) {
setTimeout(function() {
alert(index + ': ' + value);
}, time);
time += 500;
});
答案 1 :(得分:1)
将您要在function()
对象中执行的代码作为第一个参数传递给setTimeout()
,如下所示:
var time = 500;
$.each(data, function(index, value) {
setTimeout(function() { alert(index + ': ' + value) }, time);
time += 500;
});
答案 2 :(得分:1)
根据你的评论:
我正在使用此函数发出数据库请求,但它们没有按照我要求的顺序返回
回调方法直观且易于实现,但如果您有100个请求,该怎么办?假设每个响应时间200ms,总共20秒。
所以这就是问题:您是否真的关心AJAX调用的返回顺序,或者您只需要按照已触发的调用顺序处理返回的数据?
如果答案是后者,解决方案将是:
答案 3 :(得分:0)
Found a good answer on a similar issue using callbacks: