0

我需要在暂停的情况下一个接一个地运行多个计时器。定时器的输入来自包含一组时间的数组。我用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);

我尝试使用布尔值暂停和播放。计时器被该布尔变量暂停,但是当我恢复时,由于减少,两个计时器正在运行。

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

4

1 回答 1

1

你的代码看起来太复杂了。您所要做的就是在函数内设置超时(不带参数)并将该函数用作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在每次迭代时从数组的开头删除一个元素。您还可以保持数组不变并使用索引来跟踪进度。

于 2022-02-28T14:38:44.800 回答