如何使用delay,underscorejs / lodash执行函数

时间:2017-03-02 10:10:50

标签: javascript underscore.js lodash

背景

我有一个JavaScript功能,可以在屏幕上打印数字。此功能打印了很多数字,但我使用的屏幕与Alan Turing一样长,因此无法快速打印数字!

解决方案? Throtlle / debounce /使用underscorejslodash延迟打印。

暂定

我的第一个尝试是使用SelectList

ModelState
throttle

但是它不是以1000毫秒的间隔打印所有数字,而是每隔1000毫秒调用一次该函数,这导致它实际上只执行两次。

我的下一次尝试是使用let fun = num => { console.log(num); }; let throttleFun = _.throttle(fun, 1000); for (let i = 0; i < 10; i++) { throttleFun(i); }

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
debounce

现在,再次,debounce实际上延迟了我的函数的执行,因为它上次执行1000ms,而不是打印1000ms的分离值,这导致它只执行一次。

问题

我之前提到的所有行为都记录在案,并且它们对于下划线和lodash都是相同的。

我的问题是:

  • 使用以前的一个库(或其他类似的库),有没有办法在控制台中打印函数接收的参数,它们之间有1000毫秒的间隔,使用类似的函数样式?

请注意,虽然在这种情况下,参数恰好是数字,但实际上它们可以是字符串,对象或任何其他没有任何共同关系的东西。

1 个答案:

答案 0 :(得分:2)

您可以使用本机setInterval函数执行此操作:

let fun = num => {
  console.log(num);
};

let max = 10, i = 0;

let timer = setInterval(() => {
  fun(i);
  i++;
  if (i === max) {
    clearInterval(timer);
  }
}, 1000);

如果你想使用下划线/ lodash,你可以这样做:

let fun = num => {
  console.log(num);
};

for (let i = 0; i < 10; i++) {
    _.delay(fun, 1000 * (i + 1), i);
}