如何让Javascript每x秒执行一次代码,但是在函数完全执行之前让它等待?

时间:2016-04-08 21:08:34

标签: javascript

这里我有一段代码,每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)

3 个答案:

答案 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秒后触发。