我遵循了 this post 的答案,但是,这似乎对我不起作用。 我有一个第一个二维数组,我想在每个外循环之间超时,而不是在外循环中超时。
这是 this Fiddle 的片段显示我尝试过的三种方法之一,来自上述问题以及 this one (参见案例 1、2 和 3)。
var data = [
[
["data[0][0]"],
["data[0][1]"]
],
[
["data[1][0]"],
["data[1][1]"]
],
[
["data[2][0]"],
["data[2][1]"]
]
];
var delay = 1000;
function doSomething(i) {
setTimeout(function() {
for(let j = 0; j < data[i].length; j++) {
console.log(data[i][j]);
$('#result').html($('#result').html() + data[i][j]);
}
}, delay);
}
for(let i = 0; i < data.length; i++) {
doSomething(i);
}
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<div id="result"></div>
关于这个主题的更多问题/答案往往会产生相同的结果,所以我不知所措。
最佳答案
问题在于 setTimeout
的工作方式。它不是停止 for 循环的 sleep
命令。相反,它通过初始的 for 循环,并大致同时启动三个计时器,每个计时器持续一秒钟。这意味着它们也几乎同时结束。
你可以通过做更多类似这样的事情来获得你想要的结果(注意 setTimeout
上的计时器的 i*delay
。这样你的第一个计时器是 0ms ,第二个持续 1000 毫秒,第三个持续 2000 毫秒,你会得到你想要的交错结果。
var data = [
[
["data[0][0]"],
["data[0][1]"]
],
[
["data[1][0]"],
["data[1][1]"]
],
[
["data[2][0]"],
["data[2][1]"]
]
];
var delay = 1000;
function doSomething(i) {
setTimeout(function () {
for (let j = 0; j < data[i].length; j++) {
console.log(data[i][j]);
$('#result').html($('#result').html() + data[i][j]);
}
}, i*delay);
}
for (let i = 0; i < data.length; i++) {
doSomething(i);
}
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<div id="result"></div>
关于javascript - for循环中的setTimeout(1次超时然后立即循环)(双循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874979/