Javascript在带有数组的for循环内延迟

时间:2018-04-07 22:17:51

标签: javascript arrays for-loop delay

嘿伙计们我很难过,我有这段代码。从谷歌表中获取一些数据并将其放入数组中。更具体地说,它获取地址和金额。它比在阵列中创建一个小数组的数组。然后我得到数组并循环通过它我但我希望它在下一个数组之前暂停10秒。这就是我所拥有的:

                const randomArray = [];
                for (var i = 0; i < rows.length; ++i) {
                    let row = rows[i];
                    randomArray.push(row);
                }
     for (const data of randomArray) {
                    setTimeout(() => {
                        const AddressID = data[0];
                        const Amount = parseFloat(data[1]);
                        console.log(AddressID, Amount);
                    }, 5 * 1000);
                }
            }

总共有4个地址和4个金额。我需要它(地址,数量)停止10秒并再次执行直到它到达最后一个。我所做的等待5秒,然后只是一次性吐出所有4个地址和金额。

2 个答案:

答案 0 :(得分:0)

  • 使用setTimeout代替setInterval
  • 循环遍历数组并根据索引设置一个等待执行回调的正确间隔(即i * 10000而不是5 * 1000延迟,其中i是数组中的当前索引)
  • 使用Array#map代替正常的for循环,因为回调执行时循环将完成,索引变量将不会保持正确的值

<强>演示

let randomArray = [[1,10], [2,20], [3,30], [4,40]];

randomArray.map((el,i) => {
  setTimeout(() => {
    const AddressID = el[0];
    const Amount = parseFloat(el[1]);
    console.log(AddressID, Amount);
  }, i * 10000);
});

另一种方法是使用递归函数,每次执行前一个回调时都会创建一个新的超时,直到你遍历数组

<强>演示

let randomArray = [[1,10], [2,20], [3,30], [4,40]],
    i = 0;
    
(function loop() {
  setTimeout(() => {
    const AddressID = randomArray[i][0];
    const Amount = parseFloat(randomArray[i][1]);
    console.log(AddressID, Amount);
    i++;
    if(i < randomArray.length)
      loop();
  }, i * 10000);
})();

答案 1 :(得分:-1)

关键是使用普通的for循环代替你的of for循环,以便获得数组的索引:

const randomArray = [];
  for (var i = 0; i < rows.length; ++i) {
    let row = rows[i];
    randomArray.push(row);
  }
 for (var j = 0; j < randomArray.length; j++) {
        var data = [randomArray[j]];
    setTimeOut(() => { console.log("Delay")}, j * 5000);
    const AddressID = data[0];
    const Amount = parseFloat(data[1]);
    console.log(AddressID, Amount);
    }

这应该每五秒开一次,只需将5000改为你喜欢的任何东西。