微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在javascript的嵌套for循环中添加超时fn?

如何解决如何在javascript的嵌套for循环中添加超时fn?

我有这样的代码

    balls_delivery1 = [6,7,8,6,6] // balls in a over(cricket match)
    // above 6 balls in 0th over so the counter(key) below will be till 0.6 
     //and then 1.1 to 1.7 and so on
    deliveries1 = [{
    '0.1': {    // 0.1 is 0th over 1st ball
      batsman: 'MEK Hussey',bowler: 'IK Pathan',non_striker: 'S Badrinath',runs: [Object]
    }
  },{}... so on many objects]
     



for (i=0; i<balls_delivery1.length; i++){
     for (j=0; j<balls_delivery1[i]; j++){
        // i is over j is ball
         console.log(`${i} over ${j+1} ball,${i}.${j+1}`);
         console.log(Object.values(deliveries1[j])[0]);
         // I want to show the above lines every 5 sec
      }
  }

请帮忙,我无法从 stackoverflow 上的 ans 解决它。

解决方法

你可以试试这样的。

for (i=0; i<10; i++){
  (function(index_i) {
      setTimeout(function() {
        for (j=0; j<7; j++){
          (function(index_j) {
              setTimeout(function() { console.log('hello ' + index_i + ' - ' + index_j); },j * 5000);
          })(j);
        }
      },i * 7 * 5000);
  })(i);
}

,

在setTimeout的循环内使用函数,像这样;

(function(){setInterval(() => console.log('hello'),5000)})()
,

你的意思是,你想每 5 秒打印 70 hellos 吗?因为当您使用循环解决方案时会发生这种情况。不要这样!

for (i=0; i<10; i++){
    for (j=0; j<7; j++){
        console.log('hello');  // I want to print this hello every 5 seconds
    }
}

或者你只是想每 5 秒打印一次 hello 而你试图用循环来解决这个问题?

这是通常每 5 秒打印一次 hello 的方法

// start the interval and memorize it
const interval = setInterval( () => {

    console.log('hello');

},5000);


// stop the interval somewhere else in your code
clearInterval(interval);

如果您在这里使用循环,则必须有一个数组来存储所有 70 个间隔,以便在必要时有机会停止它们。我无法想象这就是您想要的。

,

function testTimeout(){
    function consoleHello(i){
    setTimeout(function(){console.log('Hello' + i);},800*i); //setTimeout for 800ms
  }
  
    for (var i=0; i<10; i++){
      consoleHello(i);
  }
}

这很简单 - 在循环中使用 setTimeout 工作代码。让我更新您的代码的答案

用于工作代码段的 es6 variant

for (let i=0; i<=10; i++) {
    setTimeout(() => {console.log(i);},1000 * i);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。