如何在不使浏览器滞后的情况下暂停执行Javascript?

时间:2016-04-08 20:16:36

标签: javascript

我有一个脚本可以更改某些值并单击浏览器中的某些按钮。我正在寻找一种方法来暂停执行代码x秒,而不会让浏览器出现滞后。我正在使用Firefox,并将此脚本粘贴到其控制台中。我知道 setTimeout()函数。但是,此函数不会停止执行代码,而是等待x秒直到执行它。我正在寻找一个类似于 Python的time.sleep()函数的完整解决方案,并完全暂停代码的执行。

var init = 0.01
var start = init
var $odds = $("#oddsOverUnder")
var $button = $("#roll")
var $bet = $("#bet")

function roll(){
    $bet.val(start)
    $button.click()
    //i want to pause the execution of the code here//
    $button.click()
    //and here//
    refreshIntervalId=setInterval(roll2, 2000)}

function roll2(){
    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()}

clearInterval(refreshIntervalId)
roll()}

roll()

2 个答案:

答案 0 :(得分:1)

如何在超时内设置超时?

function roll() {
    $bet.val(start)
    $button.click()
    setTimeout(function() {
            $button.click();
            setTimeout(
                function() {
                    $button.click();
                    refreshIntervalId = setInterval(roll2, 2000)
                },
                5000
            );
        },
        5000
    );
}

另请参阅:https://stackoverflow.com/a/951057/2119863

答案 1 :(得分:1)

在JavaScript中没有与Python的time.sleep()等价的东西,它通常是按设计异步执行的。如果您想延迟执行代码,可以使用setTimeout,如您所述。

如果不准确理解您的代码应该做什么,我无法建议这个问题的理想架构。肯定有一种更好的方式来实现它,而不是我要提出的建议。不过,要回答你的问题,你可以用这种方式模拟你的问题:

function roll() {

    $bet.val(start);
    $button.click();

    setTimeout(function () {
        $button.click();
        setTimeout(function () {
           refreshIntervalId = setInterval(roll2, 2000);
        }, 1000);
    }, 1000);

}