javascript - 如何在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 开始,延迟变量本质上就变成了一个常数。如何在每次迭代中更改延迟变量?
解决方案
您可以为此创建一个递归计时器功能:
尝试以下操作:
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();
推荐阅读
- java - 使用递归缩进输出
- python - plt.plot 绘制多条曲线而不是单条曲线
- for-loop - 在 TXT 文件中添加一行。蝙蝠
- javascript - 在这个 Svelte 项目中,如何过滤一个数组并返回它而不是另一个?
- mips - 为什么我收到“程序已完成运行(掉到底部)错误?
- python-3.x - 为什么 pycharm 给出“预期语句结束”错误
- postgresql - PostgreSQL:在 CREATE ROLE 中分配生成的密码
- windows - 在 Windows 10 上使用 OMNETPP shell 将 libxml 与 MinGW 链接
- java - 全局配置 Jackson 以在 UTC 中序列化日期
- javascript - 使用 javascript 检查服务器是否在线