запуск асинхронной функции раз в минуту - PullRequest
0 голосов
/ 20 ноября 2018

Я планировал получать данные с сервера каждую минуту. Однако, если я запускаю этот код, эта функция вызывается повторно. С другой стороны, если я добавлю date.getMilliseconds == 0 в условие, оно не будет обрабатывать никаких результатов. Есть ли у вас какие-либо предложения о том, как запускать функцию раз в 1 минуту?

async update() {
 var date = new Date();
 if (date.getSeconds() == 0) {
   var newdata = await getData(1);
   array.shift();
   array.push(newdata); 
  }
}

1 Ответ

0 голосов
/ 20 ноября 2018

Так как похоже, что у вас нет точного контроля при вызове update, одним из вариантов будет установка логического значения на true каждый раз getSeconds() === 0 (в противном случае установите false), изатем запускать реальный код только в том случае, если установлен флаг false и getSeconds() === 0:

let hasRun = false;
// ...
async update() {
 var date = new Date();
 const secs = date.getSeconds();
 if (secs !== 0) {
   hasRun = false;
 } else if (secs === 0 && hasRun === false) {
   hasRun = true;
   // your code
   var newdata = await getData(1);
   array.shift();
   array.push(newdata); 
  }
}

Альтернатива, которая может потребовать меньше ресурсов из-за того, что не создает Date s каждый кадрбудет иметь отдельную функцию, которая переключает логическое значение, с установленным setInterval, который запускается каждые 60 секунд, без участия Date:

let hasRun = false;
setInterval(() => hasRun = false, 60000);
async update() {
  if (hasRun) return;
  hasRun = true;
  // your code
}

(конечно,Вы также можете попробовать setInterval(update, 60000), если это позволяет фреймворк)

...