如何 运行 多个计时器一个接一个地在 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
数组的开头删除一个元素。您也可以保持数组不变,并使用索引来跟踪进度。
我需要运行多个定时器接一个暂停。计时器的输入来自包含一组时间的数组。我用 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
数组的开头删除一个元素。您也可以保持数组不变,并使用索引来跟踪进度。