Оператор переключения между функциями - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь создать оператор switch, в котором каждый случай вызывает функцию с таймером setInterval, автоматически переходящим от случая к случаю без остановок.

 var myTimer;
 switch(myTimer = setInterval(function() {
   case 1:
    auto_url();
    break;
   case 2:
    auto_url2();
    break;
   case 3:
    auto_url3();
   }, 10000);

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Для вызова функций в требуемом порядке и многократно вы можете взять массив и сохранить индекс для доступа.

Для каждого вызова обратного вызова setInterval функция извлекается измассив и называется.Индекс обновляется и корректируется для следующего доступа.

var fn1 = function () { console.log('fn1'); },
    fn2 = function () { console.log('fn2'); },
    fn3 = function () { console.log('fn3'); },
    fns = [fn1, fn2, fn3],
    index = 0,
    myTimer = setInterval(function() {
        fns[index++]();
        index %= fns.length;
    }, 1500);
0 голосов
/ 27 сентября 2019

Вы не можете этого сделать.switch - это оператор со следующим синтаксисом:

switch (expr) {
  case expr:
    statements
  default:
    statements
}

с нулем или несколькими предложениями case и нулем или одним предложением default.Ваше выражение switch поглотило регистры, так что для switch их нет, а ваши предложения case обнажены в функции без switch.Также не совсем понятно, что вы хотели бы включить.

Самый чистый способ переписать ваш пример - использовать объект поиска:

const lookup = {
  1: auto_url1,
  2: auto_url2,
  3: auto_url3,
};

let which = 1;
func = lookup[which];
if (func === undefined) {
  console.error("Bad which.");
} else {
  let myTimer = setInterval(lookup[which], 10000);
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...