Как вызывать две чередующиеся функции в цикле каждые 5 минут в JavaScript? - PullRequest
0 голосов
/ 15 мая 2018

Признавая, что метод setTimeout() является асинхронным и, следовательно, начиная с этого:

for (var i = 1; i <= 3; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i + " second(s) elapsed");
    }, i * 1000);
  })(i);
}

Я бы хотел заменить console.log() с чем-то с эффектом

, вызываемые поочередно, каждый с задержкой, скажем, 5 минут,но нужна помощь, чтобы заменить его, не ломая его :-) Поэтому я спрашиваю.


Это была одна ранняя (но неудачная ) попытка:

i=0;
while(i < 100)
{
    setTimeout(function(){ window.open("https://www.bbc.com","_self") }, 3000);
    setTimeout(function(){ window.open("https://www.cnn.com","_self") }, 3000);
  i++
}

tldr;

также подумал об использовании switch() оператора


См. Также:

Как сделатьsetTimeout в цикле while выполняется последовательно в JavaScript?

Закрытие JavaScript внутри циклов - простой практический пример

Вызов двух методов поочередно через каждые 5 минут.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Попробуйте использовать функцию Interval.

  setInterval (()=> {
     // TODO inserte code here
    }, 300*1000);   
0 голосов
/ 15 мая 2018

Если вы хотите пойти в цикле, вы можете поместить URL-адреса в массив и зациклить их, вызывая setTimeout() для следующего каждый раз:

let urls = [
    "https://www.bbc.com",
    "https://www.cnn.com",
    "https://www.npr.org"
]
function openURLs(urls, i=0){
    setTimeout(function(){
         console.log(urls[i]) // or whatever you want to call here
         openURLs(urls, (i+1) % urls.length)
        }, 1000)
}
openURLs(urls)

Дополнительные примечания:

Остаток% (он же "по модулю")

alert(1 % 3); // 1
alert(2 % 3); // 2
alert(3 % 3); // 0

alert(4 % 3); // 1
0 голосов
/ 15 мая 2018

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

function toggleCalls () {
  var timer = {timeout: null};
  function callA () {
    console.log("A Called");
    timer.timeout = setTimeout(callB, 1000);
  }
  function callB () {
    console.log("B Called");
    timer.timeout = setTimeout(callA, 1000);
  }
  callA();
  return timer;
}

var timer = toggleCalls();

setTimeout(function () {
  clearTimeout(timer.timeout);
  console.log("stopped");
}, 5000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...