【问题标题】:setTimeout not working inside of my for loop - skipping it completelysetTimeout 在我的 for 循环中不起作用 - 完全跳过它
【发布时间】:2021-09-27 07:53:41
【问题描述】:
function whatever () {
  for (var i=0; i < arr.length; i++) {
     do something
    slowDown();
  };
};

 function slowDown () {
   time = setTimeout(function (){
       do something else
   }, 5000);
};

【问题讨论】:

  • 预期的行为是什么?
  • slowDown() 将安排一些事情稍后执行。它实际上不会减慢任何速度。如果你有一个超过 10 个项目的循环,那么你只有 10 个任务计划在 5 秒后执行。
  • 如果我反过来尝试,数组的长度是不确定的
  • 你可以等待一个承诺:stackoverflow.com/questions/951021/…

标签: javascript for-loop settimeout


【解决方案1】:

与其相反,为什么不只是设置和间隔,对当前数组值执行直到完成,然后清除它?

let ctr = 0, time = setInterval(function() {
    let curitem = arr[ctr];
    // do somethign with curitem
    if (++ctr >= arr.length) clearInterval(time)
  }, 5000);

【讨论】:

  • 谢谢。这很好用。但是,当 ctr++ >= arr.length 我变得未定义
【解决方案2】:

@vlaz 在对该问题的评论中指出的是正确的:

slowDown() 将安排稍后执行。它实际上不会减慢任何速度。如果您有超过 10 个项目的循环,那么您只需安排 10 个任务在 5 秒后执行。

不确定这是否有帮助,但我认为这非常相似 https://stackoverflow.com/a/5226333/10293708

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 2023-02-05
    • 2017-11-13
    • 2015-10-18
    • 2013-02-01
    • 1970-01-01
    • 2010-10-01
    • 2023-03-25
    相关资源
    最近更新 更多