尝试在 while 循环中延迟使用 setTimeout()

trying to delay using setTimeout() in a while loop

我基本上是在尝试为赌博网站制作自动化脚本。如果您了解轮盘赌游戏模式,您现在将有大约 20 秒的时间来选择颜色,并有 10 秒的时间让每一轮的结果出现。我想做的是为脚本制作一个 while 循环 运行 直到余额达到一定数量。我苦苦挣扎的是使用设置超时功能每 30 秒进行一次延迟,以便投注机器人可以在每一轮下注,基本上它会等待 30 秒,然后机器人下注。 示例:

do{
    delay 30 seconds amount 
    run bot()
}while(condition)

当我尝试使用设置超时功能并使用网站上的脚本时,它开始无限下注,整个事情都崩溃了,因为延迟没有正确发生。 这是代码:

function Bot(bt, bc)
{

  l = ((document.getElementsByClassName("roulette-past-queue--previous-rolls-container horizontal-scroll")[0].innerText).length);
  f = document.getElementsByClassName("roulette-past-queue--previous-rolls-container horizontal-scroll")[0].innerText;
  number = f[l - 1];
  number = parseInt(number.replace(" ", ""));
  if (number >= 1 && number <= 7)
  {
    LastResult = "red";
  }
  if (number >= 8 && number <= 14)
  {
    LastResult = "black";
  }
  if (number == 0)
  {
    LastResult = "green";
  }
  if (LastResult == bc)
  {
    if (bc == "red")
    {
      document.getElementById('bet-input-r').value = bt;
      document.getElementById('roulette-btn-red').click();
    }
    else
    {
      document.getElementById('bet-input-r').value = bt;
      document.getElementById('roulette-btn-black').click();
    }

  }
  if (LastResult != bc)
  {
    if (bc == "red")
    {
      document.getElementById('bet-btn-double-r').click();
      document.getElementById('roulette-btn-black').click();
      bc = "black"
        bt = bt * 2

    }
    else
    {
      document.getElementById('bet-btn-double-r').click();
      document.getElementById('roulette-btn-red').click();
      bc = "red"
        bt = bt * 2
    }
  }

}

balance = document.getElementById('balance').innerHTML;
balance = parseInt(balance.replace(",", ""));
bet = 10
  TargetBalance = 99988
  document.getElementById('bet-input-r').value = bet;
betcolor = "black";
if (betcolor == "red")
{
  document.getElementById('roulette-btn-red').click();
}
else
{
  document.getElementById('roulette-btn-black').click();
}
//this is the looping part causing the problem i have deleted setTimout so you can see what i mean clearly
do
{
  // 30 seconds delay
  Bot(bet, betcolor)

}
while (balance < TargetBalance && balance > bet)

原则上至少有三种可能

  1. 使用async/await

使周围的范围async然后await一个在给定时间段后解决的Promise

async fun doTheLoop() {
  do {
    await new Promise(res => setTimeout(res, 30000)); //the promise resolves after 30 seconds
    Bot(bet, betcolor);
  } while (balance < TargetBalance && balance > bet)
}

doTheLoop();
  1. 使用setTimeout()
function callTheBot() {
   Bot(bet, betcolor);

   if (balance < TargetBalance && balance > bet)
     setTimeout(callTheBot(), 30000);
}

setTimeout(callTheBot, 30000);
  1. 使用setInterval()并在不再满足条件时取消间隔
let interval = setInterval(() => {
  if (balance < TargetBalance && balance > bet) {
    Bot(bet, betcolor);
  } else {
    clearInterval(interval);
  }
},30000);

这将是最简单的方法,但您必须删除循环,否则,您将收到 gazzilion 调用。在 Bot 函数的末尾添加此检查。

  if(balance < TargetBalance && balance > bet) {
      setTimeout(() => {
          Bot(bet, betcolor)
      }, 30000); // Expects ms, so 1000 * 30
  }

还有另一种方法使用 async/await。首先创建一个延时函数:

function delay(){
    return new Promise((resolve) => {
         setTimeout(() => resolve(), 1000)
    });
}

然后,对其使用等待。请注意,要使用它,作用域必须是异步的。

async function main() {
    for(let i = 0; i < 5; i++) {
         console.log(i);
         await delay();
    }
}