首页 > 解决方案 > 如何在javascript的每次迭代中以随机间隔运行setTimeout()?

问题描述

我试图迭代一个字符串数组,每一步迭代都有几毫秒的延迟。像下面的东西 -

var l = ['a', 'b', 'c'];
var delay = 5000;
for(var i = 0;i < l.lenght;i++) {
    document.querySelectorAll("a[title='" + l[i] + "']")[0].parentNode.children[0].click();
    delay = 5000 + Math.floor(Math.random() * 5000) + 1;
   **<WAIT for 'delay' number of milliseconds**
}

我已经能够使用 setTimeout() 方法将代码转换为以下代码 -

var i = 0;
var interval = setInterval(function() {
    if (i < l.length) {
        document.querySelectorAll("a[title='" + l[i] + "']")[0].parentNode.children[0].click();
       i++;
   }
   else {
      clearInterval(interval);
   }
   //delay = 5000 + Math.floor(Math.random() * 5000) + 1); **NOT SURE where to change the delay variable**
}, delay);

但是一旦 setTimeout 开始,延迟变量本质上就变成了一个常数。如何在每次迭代中更改延迟变量?

标签: javascript

解决方案


您可以为此创建一个递归计时器功能:

尝试以下操作:

function displayValue(){
  
  let arr = ['a', 'b', 'c'];
  let delay = 1000;  
  let i = 0;
  
  function timerFunction(i){
     if(i === arr.length)
      return;
      setTimeout(()=>{
        console.log(arr[i]);
        i++;
        timerFunction(i);
      }, delay);
      delay = delay + 1000 + Math.floor(Math.random() * 4000);
  } 
  
  timerFunction(i);
}

displayValue();


推荐阅读