假设我有一个每隔500毫秒记录一次“Hello”的功能。
var logHello = function() {
setInterval(function(){
console.log("Hello");
}, 500);
};
是否有办法编写另一个函数来检查logHello是否每秒被调用大于或等于1次(不修改原始的logHello函数)。
在这种情况下,它将返回true,因为Hello将在1秒内记录2次。
答案 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
。