сделать вложенный набор интервалов - PullRequest
0 голосов
/ 10 марта 2020

У меня есть вызов функции из заданной функции интервала, который должен выполняться через каждые 1 мт. Но теперь его работа зависит от родительской итерации 0.5 mt.

 let intervalA;
let intervalB;
var timeInMinuts;
const a = () =>
  // Assign the interval to global variable
  timeInMinuts = 60000;
  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 = () => {

  // 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);
  }, timeInMinuts);  
}

// Создать первый интервал a (); примечание: нужен такой код, как вызов функции с заданным интервалом из другой. Мне нужно o / p как A: 10:32:34 B: 10: 33: 4 A: 10: 33: 4 A: 10: 33: 34

1 Ответ

0 голосов
/ 10 марта 2020

Вы должны разделить каждый интервал и назначить их глобальной переменной, чтобы очистить их при необходимости.

Примечание: 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 с:

  • A
  • AB
  • A
  • AB
  • ... et c
...