簡體   English   中英

如何在 Set 元素上的 for of 或 forEach 循環的每次迭代之間添加延遲?

[英]How do I add a delay between each iteration of a for of or forEach loop over Set elements?

我有一個 function 如下所示,其中 websocketServer.clients 基本上包含一組 websocket 對象。 setInterval 導致我的服務器出現峰值,我想基本上以更統一的方式一個接一個地終止不活動的客戶端,中間有一個小的延遲。 forEach 和 for of 循環都是即時運行的,我如何在它們之間添加延遲以在不使用 setInterval 的情況下復制相同的功能?

export function terminateIdleConnections() {
  const interval = setInterval(function ping() {
    console.log('entry', new Date());
    websocketServer.clients.forEach(function each(ws) {
      // @ts-ignore
      if (ws.isAlive === false) {
        console.log('terminating connection', new Date());
        return ws.terminate();
      } else {
        console.log('pinging connection', new Date());
        // @ts-ignore
        ws.isAlive = false;
        ws.ping();
      }
    });
  }, WEBSOCKET_CHECK_IDLE_CONNECTION_FREQUENCY);

  websocketServer.on('close', function close() {
    console.log('terminating INTERVAL', new Date());
    clearInterval(interval);
  });
}

我想這是一種奇怪的方法,但是如果您嘗試使用setTimeout來實現它呢? 您需要在每次 function 調用時啟動另一個setTimeout ,以便重新安排下一個 function 活動。

不幸的是,我沒有可用的設置來嘗試這種方法。

setIntervalsetTimeout是我所知道的唯一延遲代碼執行的 JavaScript 方法。 Afaik 每個替代實現都會返回到這些函數,或者通過循環直到達到某個日期/時間來消耗 CPU 時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM