我想要实现的目标: 迭代数组并逐个调用其他函数的函数,在调用另一个
之前等待函数完成每次调用该函数时,它都应该返回到数组的开头
例如1, 2, 3, 4
如果添加5
,则应在到达1
之前调用从5
开始的函数
以下是我在搜索后尝试的内容:
function startFlash(num, value) {
console.log(num);
if (0 < num.length) {
console.log('settimeup');
setTimeout(function () {
sequence.forEach(function (entry) {
setTimeout(function () {
if (entry == "red") {
flashRed();
} else if (entry == "green") {
flashGreen();
} else if (entry == "blue") {
flashBlue();
} else if (entry == "yellow") {
flashYellow();
}
}, 1000)
})
num++;
startFlash(num, value);
}, 1000);
}
}
所以startFlash
被一个函数调用,该函数使用math.floor
生成1-4之间的数字,根据数字,将颜色,红色/蓝色/黄色/绿色添加到数组sequence
现在上面的代码同时调用所有方法,这不是我想要的。
继续做更多搜索之后我试过的其他内容:
if (sequence[sequence.length -1] == "red") {
flashRed();
} else if (sequence[sequence.length -1] == "green") {
flashGreen();
} else if (sequence[sequence.length -1] == "blue") {
flashBlue();
} else if (sequence[sequence.length -1] == "yellow") {
flashYellow();
}
现在这个代码只调用数组中的最新值,就像它建议的那样,但我需要它从数组中的第一个值开始
任何帮助?
答案 0 :(得分:0)
考虑使用Promises
let chain = Promise.resolve();
sequence.forEach(entry=>{
chain = chain.then(()=>{
if (entry == "red") flashRed()
// ... etc
})
})