如何清除所有非数组区间

How to clear all non-array intervals

我在单个页面上有多个计时器,它们由 ajax 更新启动。每个间隔都有自己的名称分配给玩家的用户名。我想在游戏结束时置顶所有计时器:

这是创建间隔的方式:findNewPlayer() 在游戏中的某些事件中被调用:

function findNewPlayer(){
    $.ajax({
        url:"check.php",
        success:function(data){newTimer(data)}
    })
}

function newTimer(username){
 var username=setInterval(function() {startTimer()}, 1000);
}

function startTimer(){
    //blah blah
}

现在我想停止所有计时器并重新开始当前玩家的游戏。如何对一系列未在数组中生成的用户名使用 clearInterval?我知道如果它们是数组,我可以执行以下操作,但我想找到一种方法来收集 window.

中具有不同名称的所有计时器
for (i = 0; i < interValArray.length; i++) {
    clearInterval(interValArray[i]);
}

您可以维护一个数组来保存 setTimeout 调用返回的 ID,然后在重置时遍历该数组:

const timerIds = [];

function newTimer(username){
 timerIds.push(setInterval(function() {startTimer()}, 1000));
}

当您重置并开始新玩家时,您需要清除计时器:

timerIds.forEach(clearInterval);