gpt4 book ai didi

javascript - for循环中的setTimeout(1次超时然后立即循环)(双循环)

转载 作者:行者123 更新时间:2023-11-29 10:01:51 25 4
gpt4 key购买 nike

我遵循了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com