如何在underscore.js的每次迭代中添加延迟?

6

如何在每次 _.each 循环迭代中添加延迟,以使内部函数的调用间隔为 1 秒钟?

  _.each(this.rows, function (row, i) {
      row.setChars(msg[i] ? msg[i] : ' ');
  });

1
你能再明确一些吗? - zerkms
基本上,我想让每行调用row.setChars的时间间隔为1秒。 - stroz
你的解决方案是多余的。 - zerkms
哪一部分是冗余的? - stroz
2个回答

12

你不需要额外的IIFE

_.each(this.rows, function (row, i) {
    setTimeout(function () {
        row.setChars(msg[i] ? msg[i] : ' ');
    }, 1000 * i);
});

因为您没有在显式的 for 循环中执行它。


太棒了!非常感谢,这比我的解决方案更好。 - stroz
如果答案可接受,您应该考虑接受它。 - r3wt
1
我知道现在说有点晚了,但这个东西真的救了我的命...如果有人想知道为什么它能起作用——当使用 _.each 进行循环时,所有计时器几乎同时设置在所有对象上。因此,在间隔标记(在本例中为1秒)时,所有计时器都会过期。所以这是一个非常有创意的解决方案 :) - adamdabb
很棒的答案,非常聪明的方法。 - Anthony

0

找到了答案,只需在 _.each 循环内添加一个自调用函数,并设置一个基于循环迭代次数不断增加的超时时间。

这里是一个可工作的示例(已编辑以去除冗余):

  _.each(this.rows, function (row, i) {
      setTimeout(function () {
          row.setChars(msg[i] ? msg[i] : ' ');
      }, 1000 * i);
  });

你和@zerkms的答案有什么区别? - Rahil Wazir
我的答案先到了,我进行了编辑以消除冗余,以免混淆任何人。 - stroz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接