javascript-setTimeout for循环(1次超时,然后一次循环)(双循环)

我遵循了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,第二个为1000ms,第三个为2000ms,并且得到了交错的结果,再之后.

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>
上一篇:Python两次求和-蛮力法


下一篇:java-递归而不是多循环