如何在JavaScript中间隔执行一系列功能?

时间:2019-04-14 03:00:09

标签: javascript function

我想按顺序并以1秒的间隔执行一系列功能,为此我编写了两个函数d[] <- t(apply(d, 1, zoo::na.locf)) d # c1 c2 c3 #1 a a a #2 1 2 3 #3 2 2 4 #4 3 4 4 #5 4 5 6 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不能很好地工作。函数main1有什么问题?

2 个答案:

答案 0 :(得分:0)

我不确定main1函数为什么不起作用,但是我遇到了两个问题:

  • myPause这样的暂停会阻塞执行并浪费CPU时间。您应该使用类似setTimeout的东西。

  • 您应该避免使用eval,有关更多信息,请参见this question

  • 为什么for中的外部myPause?在等两次?

我不确定您要完成什么,但是如果您需要类似的东西:

  • 在第二个1,致电myFunc_1

  • 在第二秒,致电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);

答案 1 :(得分:0)

有很多方法可以做到这一点。这是其中之一:

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