setTimeout在for循环内具有随机值

时间:2019-04-05 14:15:08

标签: javascript

问题是setTimeout中的for loop函数没有获得正确的值,尽管它们正确地传递了。第二个问题是sleep变量不起作用,它只是忽略了它。其他变量,例如i表现得很奇怪,它们没有经过循环,而是以随机顺序进行。

内部函数set_delay

console.log(i); 
// 3,5,0,2,4,1 should be 0,1,2,3,4,5
console.log(sleep); 
// 6000,6000,7000,9000,9000,10000, those ones are displayied in ASC order but shuold be randomly
console.log(share_screen_rate[i]); 
//4,1,6,10,6,2,8 - this is not ok it's random
console.log(top); 
// 749.5,2998,299.8,499.667,149,374.75 =>  this should be in order from smallest (149) to biggest (2998)

setTimeout(function() {

}, sleep);

如果我将sleep更改为类似2000的数值,则仅在第一次迭代后才尊重它,只是在0毫秒。

完整代码

https://jsfiddle.net/ojpv2nxu/

预期产量

这应该是一个简单的脚本,用于根据sleep变量向下滚动页面并暂停,并基于share_screen_rate变量逐块读取页面

1 个答案:

答案 0 :(得分:1)

我认为这是一个逻辑问题。...您期望setTimeout发生在最后一个事件之后的x秒。但是设置后,它们会发射x秒。因此它按预期工作。

如果您希望它们在最后一秒后触发x秒,则需要更改逻辑以跟踪秒数并调整计时器。

因此在文件顶部添加

var timeTrack = 0

并且您需要添加该值

timeTrack += sleep
setTimeout(function() {

}, timeTrack);