【问题标题】:Javascript setTimout in loop not working as expected循环中的 Javascript setTimeout 无法按预期工作
【发布时间】:2021-09-12 15:10:18
【问题描述】:

我想使用 setTimeout 以降序打印数组。我不知道为什么下面的代码不能按降序工作。

let delay = 1000;
let array = [1, 2, 3, 4, 5];
for(let i = array.length; i > 0; i--) {
      setTimeout(() => {
        console.log(array[i - 1]);
      }, delay * i);
}

预期输出为5 4 3 2 1,延迟一秒。但它正在打印1 2 3 4 5 如果我从setTimeOut() 中删除i,它将按预期输出,但不会出现延迟。

非常感谢您的帮助。 谢谢。

【问题讨论】:

  • 这个jsfiddle.net/db5cghna 和这个jsfiddle.net/db5cghna/1 有帮助吗?
  • 在每个 cicle 中,您都设置这样的延迟:delay * ii 的范围从 5 到 1。这意味着您的超时将以相反的顺序到期:5000(设置在第一个周期)将在 4000(设置为第二个周期)后过期,依此类推。第一个到期的超时将是在最后一个周期设置的超时 (1000)。
  • @jabaa 是的,谢谢。
  • @Ibsn,谢谢。我理解错误。谢谢。

标签: javascript for-loop settimeout


【解决方案1】:

这是你说的 JS 在五秒后打印“5”,然后在四秒后打印“4”,然后在三秒后打印“3”等等......实际上代码只是按照你说的做。你可以这样做

let delay = 1000;
let array = [1, 2, 3, 4, 5];
for(let i = array.length, j = 0; i > 0; i--, j++) {
      setTimeout(() => {
        console.log(array[i - 1]);
      }, delay * j);
}

【讨论】:

    【解决方案2】:

    我认为这是你想做的事情:

    let delay = 1000;
    let array = [1, 2, 3, 4, 5];
    for(let i = array.length; i > 0; i--) {
          setTimeout(() => {
            console.log(array[i - 1]);
          }, delay * (array.length - i));
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-11
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多