我想按顺序并以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
有什么问题?
答案 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
。