编写一个函数,检查在一个时间间隔内调用另一个函数的次数

时间:2015-11-19 00:30:26

标签: javascript

假设我有一个每隔500毫秒记录一次“Hello”的功能。

var logHello = function() {
  setInterval(function(){ 
    console.log("Hello"); 
  }, 500);
};

是否有办法编写另一个函数来检查logHello是否每秒被调用大于或等于1次(不修改原始的logHello函数)。

在这种情况下,它将返回true,因为Hello将在1秒内记录2次。

1 个答案:

答案 0 :(得分:1)

我假设你出于调试原因想要这样做,所以我必须警告你不要在任何生产应用程序中包含这些代码,因为它实际上只是用于调试。我们的解决方案工作非常酷,但是它会覆盖原生的javascript功能,这通常是不受欢迎的,因为如果你改变了本机功能行为,它会导致代码的行为与预期不同。

如果条件是您不允许修改代码,则只需覆盖javascript' setInterval,并将其用作" hook"进入你的功能。我们将修改setInterval以跟踪调用方法之间的时差(秒)。然后,我们将调用并返回原始setInterval方法,以便您的代码仍能按预期运行:

// keep a pointer to the original setInterval function
var oldSetInterval = window.setInterval;

// we will create our own setInterval function and put logging in it
window.setInterval = function(block, interval) {
  var lastRunAt;
  return oldSetInterval(function() {
    // here is where we print how long it's been since the method last ran
    if(lastRunAt) {
      console.log("the interval last ran " + (Date.now()-lastRunAt)/1000 + " seconds ago");
    }
    lastRunAt = Date.now();
    block();
  }, interval);
}

现在正在运行logHello()会产生:

Hello
the interval last ran 0.504 seconds ago
Hello
the interval last ran 0.504 seconds ago
Hello
the interval last ran 0.505 seconds ago

这假设您在网络上运行。如果您在节点中,请将对window的引用替换为globals