如何在JS中逐个遍历数组中的每个对象?

时间:2018-03-21 16:23:09

标签: javascript

我想要实现的目标: 迭代数组并逐个调用其他函数的函数,在调用另一个

之前等待函数完成

每次调用该函数时,它都应该返回到数组的开头 例如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();          
         }

现在这个代码只调用数组中的最新值,就像它建议的那样,但我需要它从数组中的第一个值开始

任何帮助?

1 个答案:

答案 0 :(得分:0)

考虑使用Promises

let chain = Promise.resolve();
sequence.forEach(entry=>{
    chain = chain.then(()=>{
        if (entry == "red") flashRed()
        // ... etc
    })
})