[英]How to iterate over each object in array one by one not simultaneously in JS?
我要實現的功能:遍歷數組並一個接一個地調用其他函數的函數,等到函數完成后再調用另一個函數
每次調用該函數時它應該回到該陣列例如開始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();
}
現在上面的代碼只像建議的那樣調用數組中的最新值,但是我需要它從數組中的第一個值開始
有什么幫助嗎?
考慮使用Promises
let chain = Promise.resolve();
sequence.forEach(entry=>{
chain = chain.then(()=>{
if (entry == "red") flashRed()
// ... etc
})
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.