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

How to pause the execution of Javascript without making a browser lag out?

本文关键字:情况下 暂停 Javascript 执行 滞后 浏览器      更新时间:2024-04-11

我有一个脚本,可以更改一些值并单击浏览器中的一些按钮。我正在寻找一种方法来暂停代码的执行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()

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

如果不了解代码应该做什么,我就无法为这个问题提出理想的体系结构。肯定有比我要建议的更好的方法。不过,为了回答你的问题,你可以用这种方式模拟你在问什么:

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

在超时内设置超时如何?

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