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

标签 javascript loops timer

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

相关文章:

javascript - Protractor 页面对象 - TypeError : Object #<Object> has no method 'methodName'

javascript - 如何在 javascript 对象中设置属性的类型,就像 mongoose 架构设计一样。?

python - 无限 While 循环 - 内存使用?

c# - 如何在一天中的特定时间运行 .net Core IHosted 服务?

javascript - 表格 : Show entry after a click below a form

javascript - 在 go 和 javascript 之间传递变量

python - PyQt:如何动态调用objectNames?

java - 无限二维数组搜索

multithreading - PerformSelector 单点触控线程

C++ Windows 暂停定时器