Вы должны разделить каждый интервал и назначить их глобальной переменной, чтобы очистить их при необходимости.
Примечание: setTimeout()
и setInterval()
не являются надежными для операции точного времени , для этого типа задачи вы должны обращаться к времени часов каждый раз через Date()
, возможно, с меньшими интервалами проверок. Альтернативы requestAnimationFrame()
и веб-работники .
// Store the interval in global variables so them are reachable to be cleared from any function
let intervalA;
let intervalB;
const a = () =>
// Assign the interval to global variable
intervalA = window.setInterval(function() {
const today = new Date();
const time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
console.log('A: ' + time);
// Check if event is assigned and then instantiate the intevalB
if (!intervalB) b();
} , 30000);
const b = () => {
const timeInMinuts = 60000;
// Assign the interval to global variable
intervalB = setInterval(function() {
const today = new Date();
let time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
console.log('B: ' + time);
}, 60000);
}
// Create first interval
a();
- Через 30 с вызывается обратный вызов A (глобальное время 30 с), и B устанавливается с задержкой 60 с
- После 30 с вызывается обратный вызов A (golbal время 60 с) и B имеет 30 с до начала
- Через 30 с вызывается A и вызывается B (глобальное время 90 с)
Теперь, каждые 30 с: