Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在for循环中设置超时(1超时,然后立即循环)(双循环)_Javascript_Loops_Timer - Fatal编程技术网

Javascript 在for循环中设置超时(1超时,然后立即循环)(双循环)

Javascript 在for循环中设置超时(1超时,然后立即循环)(双循环),javascript,loops,timer,Javascript,Loops,Timer,我按照答案回答,然而,这似乎对我不起作用。 我有一个二维数组,我想在每个外循环之间超时,而不是在外循环中超时 下面是一个片段,展示了我尝试的三种方法之一,来自前面提到的问题以及(参见案例1、2和3) var数据=[ [ [“数据[0][0]”, [“数据[0][1]” ], [ [“数据[1][0]”, [“数据[1][1]” ], [ [“数据[2][0]”, [“数据[2][1]” ] ]; 无功延迟=1000; 功能剂量测定(一){ setTimeout(函数(){ 对于(设j=0;j

我按照答案回答,然而,这似乎对我不起作用。 我有一个二维数组,我想在每个外循环之间超时,而不是在外循环中超时

下面是一个片段,展示了我尝试的三种方法之一,来自前面提到的问题以及(参见案例1、2和3)

var数据=[
[
[“数据[0][0]”,
[“数据[0][1]”
],
[
[“数据[1][0]”,
[“数据[1][1]”
],
[
[“数据[2][0]”,
[“数据[2][1]”
]
];	
无功延迟=1000;
功能剂量测定(一){
setTimeout(函数(){
对于(设j=0;j


问题在于
设置超时的工作方式。它不是停止for循环的
sleep
命令。相反,它在最初的for循环中燃烧,并在大致相同的时间启动三个计时器,每个计时器持续一秒钟。这意味着它们也差不多在同一时间结束

您可以通过执行类似的操作来获得所需的结果(请注意
setTimeout
上计时器的
i*delay
。这样一来,您的第一个计时器将持续0毫秒,第二个计时器将持续1000毫秒,第三个计时器将持续2000毫秒,您将获得所需的交错结果

var数据=[
[
[“数据[0][0]”,
[“数据[0][1]”
],
[
[“数据[1][0]”,
[“数据[1][1]”
],
[
[“数据[2][0]”,
[“数据[2][1]”
]
];
无功延迟=1000;
功能剂量测定(一){
setTimeout(函数(){
对于(设j=0;j

这个问题的另一个解决方案(使用递归思想)是实现一个方法,当outter数组的
索引
等于其长度时,该方法每隔
1秒
调用自身,直到到达最后一次迭代(中断条件):

var数据=[
[“数据[0][0]”,[“数据[0][1]”,
[“数据[1][0]”,[“数据[1][1]”,
[“数据[2][0]”,[“数据[2][1]”]
];
功能剂量测量(i,延迟)
{
//破坏条件。
如果(i>=data.length)
返回;
//打印内部数组。
数据[i].forEach(x=>
{
控制台日志(x);
$('#result').html($('#result').html()+x);
});
//在一段时间后调用自身以执行下一次迭代。
设置超时(()=>doSomething(i+1,延迟),延迟);
}
//开始这个程序。
doSomething(0,1000);


它与您期望的有什么不同?是否因为所有的
设置超时都在大约相同的时间完成,大约一秒钟后?@David784我希望它执行[0][0]+[0][1],然后在一秒钟后,[1][0]+[1][1]再过一秒钟[2][0]+[2][1]。因此,每个“I循环”之间都有延迟,两个循环之间没有延迟“j循环".这个*我修正确实有道理,我恨我自己没有尝试。然而,为什么我发现的所有答案都没有使用它,即使它的设置完全相同?它们被标记为解决方案。第一个答案是:与David所做的几乎完全一样。有这么多重复的答案,我迷失了方向。我正在添加到这堆答案中:(不用担心……其他一些问题似乎更多地集中在老问题上。有时候,有不同的问题集中在更窄的范围内是很好的……所以我不认为这是杂乱无章的:——)这是一个很好的解决方案,我试图让我的大脑完全围绕着这样做,但双循环打乱了我递归的思维过程。