假设我有一个每 500 毫秒记录一次“Hello”的函数。
var logHello = function() {
setInterval(function(){
console.log("Hello");
}, 500);
};
有没有办法编写另一个函数来检查 logHello 是否每秒被调用超过或等于 1 次(而不修改原始 logHello 函数)。
在这种情况下,它将返回 true,因为 Hello 将在 1 秒内被记录 2 次。
最佳答案
我假设您出于调试原因想要执行此操作,因此我必须警告您不要在任何生产应用程序中包含此代码,因为它实际上只是用于调试。我们的解决方案可以工作,这非常酷,但是它覆盖了 native JavaScript 功能,这通常会令人不悦,因为如果您更改 native 函数的行为,它可能会导致代码的行为与预期不同。
如果不允许修改代码,您可以简单地覆盖 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
这假设您正在网络上运行。如果您在 Node 中,请将对 window
的引用替换为 globals
。
关于javascript - 编写一个函数来检查另一个函数在一段时间内被调用的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33793200/