[英]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.