奇怪的概念问题。下面的数组包含三个元素。当我运行此代码时,我的意图是脚本等待两秒钟,显示警报,等待两秒钟,显示警报,等待两秒钟,并显示最终警报。相反,它只等待两秒钟,然后重新显示所有三个警报。我已经玩了一段时间,但却无法找到我所缺少的东西。有什么建议?
$.each(node_array, function(index,value){
if(value != undefined){
setTimeout(function(){
alert("hey")},
2000)
}
});
答案 0 :(得分:3)
迭代时,设置超时但不要停止迭代。所以所有的setTimeout都是同时启动的。
您需要在用户点击提醒后启动下一个setTimeout
:
var i=0;
function onestep(){
alert('hey');
var value = node_array[i];
if (++i<node_array.length) setTimeout(onestep, 2000);
}
onestep();
答案 1 :(得分:2)
每次迭代延迟2秒。
$.each(node_array, function(index,value){
if(value != undefined){
setTimeout(function(){
alert("hey");
},(index+1)*2000)
}
});
setTimeout是非阻塞的,因此代码将在延迟过去之前继续运行,导致你以相同的延迟同时触发x setTimeout all,所以它们都在同一时间完成。