Как выполнить ряд функций с интервалами в JavaScript? - PullRequest
0 голосов
/ 14 апреля 2019

Я хочу выполнить ряд функций по порядку и с интервалом в 1 секунду, и я пишу 2 функции main1 и main2, чтобы сделать это:

function main1()
{
    for (var i = 0; i < 3; i ++)
    {
        eval("myFunc_" + i + "()");
        myPause(1000);
    }
}

function myPause(x)
{
  var start = new Date().getTime();
  for (var j = start; j < start + x; j = new Date().getTime())
  {
    ;
  }
}

function main2()
{
    for (var i = 0; i < 3; i ++)
    {
        setTimeout("myFunc_" + i + "()", i * 1000);
    }
}

Я пишу функцию паузыmyPause для main1, и я думаю, что эти 2 функции делают одно и то же, но функция main1 не работает.В чем проблема функции main1?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Есть много способов сделать это. это один из них:

function starter(){
    var functions = [main1, main2 /*,...*/];
    var functionIndex = 0;
    setInterval(function(){
        functions[functionIndex++]();
        if(functionIndex == functions.length)
            functionIndex = 0;
    },1000);
}

function main1(){
    console.log('main1 executed');
}

function main2(){
    console.log('main2 executed');
}

// start the program
starter();

важное: Вы можете использовать setTimeout вместо setInterval, если хотите выполнить очередь только один раз.

0 голосов
/ 14 апреля 2019

Я не уверен, почему функция main1 не работает, но я вижу пару проблем:

  • Реализация паузы, например myPause, блокирует выполнение и тратит время процессора,Вы должны использовать что-то вроде setTimeout.

  • Вам следует избегать использования eval, подробнее см. в этом вопросе .

  • Почему внешний for в myPause?ждет дважды?

Я не уверен, чего вы хотите достичь, но если вы хотите что-то вроде:

  • в секунду 1,звоните myFunc_1

  • в секунду 2, звоните myFunc_2

  • и т. д. (и ходите по списку без остановки)

Вы можете сделать что-то вроде этого:

function myFunc1() { console.log('called myFunc1') }

function myFunc2() { console.log('called myFunc2') }

function myOtherFunc() { console.log('called myOtherFunc') }

const myFunctions = [
  myFunc1,
  myFunc2,
  myOtherFunc,
];

let counter = 0;
function runMyNextFunction() {
  let func = myFunctions[counter];

  func();

  counter += 1;
  if (counter >= myFunctions.length) {
    counter = 0;
  }
}

setInterval(runMyNextFunction, 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...