setTimeout выполняется сейчас и в данное время - PullRequest
0 голосов
/ 05 февраля 2019

есть способ запустить setTimeout немедленно, а затем запустить снова в указанное время.например, я хочу, чтобы эта функция updateItemsCache запускалась при загрузке, а затем запускалась снова каждые 3 секунды.

сейчас ее выполнение выполняется только каждые 3 секунды.

function updateItemsCache(){
  setTimeout(() => {
  //do stuff
  }, 30000);

}

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Если я правильно понимаю ваш вопрос, вы можете структурировать свой код, как показано ниже.

Таким образом, вы можете вызывать функцию (например, doStuff()) с регулярными 3-секундными интервалами через setTimeout(iteration, 3000);, где iteration - это функция, которая:

  • вызывает ваш пользовательскийлогика приложения, которую вы хотите выполнить с интервалом в 3 секунды, и
  • планирует следующую итерацию (т. е. произойдет через 3 секунды в будущем)

Этот шаблон также обеспечивает выполнение логикии сразу, и через 3 секунды после первого выполнения:

const doStuff = () => {
  console.log(`Do stuff at ${Date.now()}`);
}


function updateItemsCache(){
  
  /*
  Define iteration function that invokes your
  "stuff" logic
  */
  const iteration = () => {
    
    doStuff();
    
    /*
    Use setTimeout() to schedule the next iteration
    at 3 seconds into the future (which will cause the
    iteration to repeat on 3 second intervals)
    */
    setTimeout(iteration, 3000);
  }
  
  /*
  Start iteration which calls you "stuff" logic
  immediately, and reschedules another iteration
  */
  iteration();
}

updateItemsCache();
  
0 голосов
/ 05 февраля 2019

Следующий код объявит функцию, которая содержит setTimeout, который выполняет саму функцию.Не забудьте поставить вызов функции как последнюю вещь в вашем setTimeout.

Тогда все, что вам нужно сделать, это вызвать yout timeoutFunction ().

Это будет гарантировать, что ваш код (то, что вы ставите "// делать вещи") запускается при вызове функции.И, вызывая функцию timeout, снова запускается после желаемой задержки (мс).

const timeoutFunction = () => {
    setTimeout(() => {
        //do stuff
        timeoutFunction();
    }, ms);
}
timeoutFunction();
0 голосов
/ 05 февраля 2019

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

Нет, просто создайте функцию и вызывайте ее один раз до истечения времени ожидания и один раз за время ожидания

function updateItemsCache(){
  innerLogic()
  setTimeout(innerLogic, 30000);

}

function innerLogic(){

}
...