繁体   English   中英

编写一个函数,检查一个时间间隔内另一个函数将被调用多少次

[英]Write a function that checks how many times another function will be called in a time interval

假设我有一个每500毫秒记录一次“ Hello”的函数。

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

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

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

我假设您出于调试原因要执行此操作,因此我必须警告您不要将此代码包含在任何生产应用程序中,因为它实际上仅用于调试。 我们的解决方案可以正常工作很酷,但是它会覆盖通常不被接受的本地javascript功能,因为如果您更改本地功能的行为,它可能导致代码的行为与预期的不同。

如果不允许您修改代码,则可以简单地覆盖javascript的setInterval ,并将其用作函数的“钩子”。 我们将修改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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM