簡體   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