Javascript 如何在数组中的多个函数之间设置超时后调用它们?
需要创建存储在数组中的函数序列。需要每400ms执行一次。通过设置500Javascript 如何在数组中的多个函数之间设置超时后调用它们?,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
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);
}