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