簡體   English   中英

如何在JS中不同時遍歷數組中的每個對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM