Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在数组中的多个函数之间设置超时后调用它们?_Javascript_Jquery_Ecmascript 5 - Fatal编程技术网

Javascript 如何在数组中的多个函数之间设置超时后调用它们?

Javascript 如何在数组中的多个函数之间设置超时后调用它们?,javascript,jquery,ecmascript-5,Javascript,Jquery,Ecmascript 5,需要创建存储在数组中的函数序列。需要每400ms执行一次。通过设置500setTimeout(function(){})来实现。不知何故,我们学会了通过动态创建它来实现这一点。准备好功能,但错过了超时,使其成为一个很好的动画 以下是我认为必须设置超时的部分: function start() { mylist.name = this.className; mylist.identifier = 'port'+parseFloat(this.id); mylist.numb

需要创建存储在数组中的函数序列。需要每400ms执行一次。通过设置500
setTimeout(function(){})
来实现。不知何故,我们学会了通过动态创建它来实现这一点。准备好功能,但错过了超时,使其成为一个很好的动画

以下是我认为必须设置超时的部分:

function start() {
    mylist.name = this.className;
    mylist.identifier = 'port'+parseFloat(this.id);
    mylist.number = parseFloat(this.id);
    console.log(mylist.number);
    for (var x in todo) {
        todo[x]();
    }
}
这是包含函数的数组。多谢各位

ps:很抱歉英语不好,德国制造:)

todo=[
功能计算机1(){
$('.+mylist.name+':eq(1)').css({'background-color':'chartreuse'});
},
函数kabel1(){
$('.+mylist.name+':eq(0)').css({'border-bottom-color':'chartreuse'});
},
函数port1(){
$('#'+mylist.identifier).css({'background-color':'chartreuse'});
},
函数port2(){
对于(var x=0;x之类的东西

让startTime=newdate().getTime();
let函数=[
()=>console.log(“f0:”+(新日期().getTime()-startTime)+“已传递毫秒”),
()=>console.log(“f1:”+(新日期().getTime()-startTime)+“已传递毫秒”),
()=>console.log(“f2:”+(新日期().getTime()-startTime)+“已传递毫秒”),
()=>console.log(“f3:+(新日期().getTime()-startTime)+“已传递ms”),
()=>console.log(“f4:+(新日期().getTime()-startTime)+“已传递毫秒”),
]
设i=0;
设置间隔(()=>{
功能[i]();
i++;
如果(i>functions.length-1)i=0;

},400);
我不赞成更改数组和修改同步函数。因此更改为循环

// Created variable using let to over come closure
for (let x in todo) {
    setTimeout( ()=> {
        todo[x]();
    }, (x+1)*400);
}

您可以避免创建不必要的闭包或计算特定的超时

const delay=(ms,x)=>
新承诺(r=>setTimeout(r,ms,x))
常数函数=
[()=>console.log(1)
,()=>console.log(2)
,()=>console.log(3)
]
const forEachDelay=async(ms,[f=()=>{},[fs])=>
fs.length==0
?f()
:delay(ms,f())。然后(()=>forEachDelay(ms,fs))
forEachDelay(1000,funcs)
// 1
//(1000毫秒后…)2

//(1000毫秒后…)3
您是否有可能获得该版本的可执行版本?同时,这是相当多的代码->如果可能,请更具体一些,因为这将“关闭”一些人^^^请提供最少的示例代码:)我想你只需要代码的第一个示例部分来帮助我,但我不知道你是否需要上下文的完整代码…我不太确定你想做什么…在画布上创建动画…但是有多个功能?或者只是一个“动画”在一个div元素上?不,我想每400ms执行一次函数,这样每个函数组合在一个动画中求和。因为当我在没有超时的情况下启动程序时,所有函数都是同时执行的,如果你不等待任何东西,就不应该使函数
异步
取消承诺的返回–否则,
forEachDelay(1000,[()=>1])。然后(…)
失败,因为
1
不是承诺,并且没有
那么
只需使用
Promise.resolve(f())
即可用于基本情况。
// Created variable using let to over come closure
for (let x in todo) {
    setTimeout( ()=> {
        todo[x]();
    }, (x+1)*400);
}