如何 运行 多个计时器一个接一个地在 javascript 中暂停?

How to run multiple timers one after another with pause in javacript?

我需要运行多个定时器接一个暂停。计时器的输入来自包含一组时间的数组。我用 reduce 方法做了一些事情。但无法提前打破 reduce 方法。

const times = [5, 4, 5];
function countDown(secs) {
        console.log(secs);
        if (secs === 1) {
            clearTimeout(timer);
            return timer;
        }
        secs--;
        var timer = setTimeout(() => countDown(secs), 1000);
}

times.reduce((totalDelay, time) => {
    setTimeout(() => {
        countDown(delay);
    }, 1000 * totalDelay);
    const delay = parseInt(time);
    totalDelay += delay;
    return totalDelay;
}, 0);

我尝试用一​​个布尔值来暂停和播放。计时器被那个布尔变量暂停但是当我恢复时两个计时器是 运行ning 因为 reduce.

有没有其他方法可以使用循环或其他方法来做到这一点?

您的代码看起来太复杂了。您所要做的就是在函数内设置超时(不带参数)并将该函数用作 setTimeout.

的回调

const times = [5, 4, 5];
function countDown() {
    const secs = times.shift();
    if (typeof secs === 'number') {
        setTimeout(countDown, secs * 1000);
        console.log(`Next timer in ${secs} seconds`);
    } else {
        console.log('Done');
    }
}
countDown();

在这里,我在每次迭代时从 times 数组的开头删除一个元素。您也可以保持数组不变,并使用索引来跟踪进度。