gpt4 book ai didi

javascript - setTimeout 不调用回调来中断 while 循环

转载 作者:行者123 更新时间:2023-11-30 14:27:14 29 4
gpt4 key购买 nike

我有一个国际象棋程序,它使用递归的 alphaBeta 算法(以及其上的一些层)来搜索 Action 。我想在 10 秒后停止搜索(但我尝试用 1 秒让它工作),所以我使用 setTimeout 设置一个全局标志。

  let timeOut = false;
let i = 0;

setTimeout(() => {
timeOut = true;
console.log('timeout');
console.log('timeout');
console.log('timeout');
console.log('timeout');
}, 1000);

while (i < 1000 && timeOut === false) {
score = mtdf(pos, i, score)
console.log('depth:' + i + ', size: ' + tp.size());
i++;
}

这肯定会在浏览器中运行,所以我知道应该在浏览器中打印 console.log 语句,但事实并非如此。不调用回调。请帮忙。

编辑:添加 timeOut 变量初始化以使其更清晰。另外,抱歉,忘记添加 i 初始化(并不是说这些声明甚至与问题相关,因为问题是 setTimeout 回调甚至没有被执行...)

最佳答案

setTimeout 将运行您传递给它的函数:

  • 经过指定时间后
  • 经过最短超时时间后
  • 当事件循环不忙于做其他事情时

…以最新的为准。

您不能使用超时来中断您的 while 循环。 JavaScript 引擎正忙于运行 while 循环以检查超时队列中是否有任何函数等待运行。

当 JS 引擎不再忙时,循环完成后将调用您的函数。


不要试图从外部中断循环。

在进入while 循环之前,记录当前时间。

每次循环时,将当前时间与记录的时间进行比较。

如果差值大于您希望允许循环运行的时间段,则退出循环

关于javascript - setTimeout 不调用回调来中断 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51741042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com