这里我有一段代码,每2秒自动执行一次。但是,执行功能roll()所需的时间因互联网连接的峰值和底部而异。我试图使函数roll()每2秒自动执行一次,但代码必须等到函数完全执行后再继续并自动执行。
P.S。任何关于这个问题的更好标题的建议都将不胜感激。
var init = 0.01
var start = init
var $odds = $("#oddsOverUnder")
var $button = $("#roll")
var $bet = $("#bet")
function roll() {
$bet.val(start)
$button.click()
setTimeout(function() {
var tr = document.querySelector("#myBetsTable tr:nth-child(2)")
var cls = tr.getAttribute('class')
if (cls === 'success'){
start = init
$bet.val(start)}
else{
start = start * 2
$bet.val(start)
$odds.click()}
$button.click();
setTimeout(function() {
$button.click();
},1000);
},1000);
}
setInterval(roll, 2000)
答案 0 :(得分:1)
不要使用setInterval。无论是否完成,它都会尝试在经过的时间之后调用一个函数。 setTimeout更好,因为你可以控制它何时被调用。而且你通常只是在一个函数的末尾调用它(它自己调用它)。
E.g。
function draw() {
// Some drawing here...
setTimeout(draw, 50);
}
因此,当您调用上面的draw()时,它将执行其操作,然后等待50 ms,然后重复调用自身。
有关差异的详细信息,请参阅https://codex.wordpress.org/Function_Reference/wp_head。
答案 1 :(得分:0)
我将setTimeout添加到roll函数并在最后调用它。
var init = 0.01
var start = init
var $odds = $("#oddsOverUnder")
var $button = $("#roll")
var $bet = $("#bet")
function roll() {
setTimeout(roll, 2000)
$bet.val(start)
$button.click()
setTimeout(function() {
var tr = document.querySelector("#myBetsTable tr:nth-child(2)")
var cls = tr.getAttribute('class')
if (cls === 'success'){
start = init
$bet.val(start)}
else{
start = start * 2
$bet.val(start)
$odds.click()}
$button.click();
setTimeout(function() {
$button.click();
},1000);
},1000);
}
roll()
答案 2 :(得分:0)
最好是做这样的事情:
function roll() {
var time = Date.now();
//your stuff goes here
setInterval(roll, Math.max(2000 - (Date.now() - time)), 1);
}
这会尝试优化调用之间的tge时间,因此如果函数需要1.5秒,那么它将在0.5秒后触发。