[英]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 活動。
不幸的是,我沒有可用的設置來嘗試這種方法。
setInterval
和setTimeout
是我所知道的唯一延遲代碼執行的 JavaScript 方法。 Afaik 每個替代實現都會返回到這些函數,或者通過循環直到達到某個日期/時間來消耗 CPU 時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.