在 Javascript 如何防止在 setTimeout 持续时间内调用其他函数?
In Javascript How do I prevent other functions from being invoked while under the setTimeout duration?
我在玩井字游戏。
我加入了一个 setTimeout 函数,这样在计算机开始移动之前,它看起来像是在“思考”,然后计算机才真正在棋盘上留下标记。
然而,我注意到当计算机在“思考”时,我可以采取行动,从而打破了让对手先采取行动然后我可以采取另一个行动的目的(如果这有意义的话)
示例:
(轮到我了)我用圆圈标记了一个方框
(电脑转)电脑'thinks'...
- 我在电脑思考的时候出手
- 我的移动在计算机移动之前在棋盘上留下了标记,这意味着在 setTimeout 持续时间内仍会调用函数。
如何防止这种情况发生?这可能吗?
setTimeout(compTurn, 1000)
在玩家轮到你的点击监听器中,检查玩家是否被允许先玩。在安排 compTurn
时切换布尔值,并在 compTurn
完成时将其关闭:
// Start of game:
let playerTurn = true;
// ...
// Make computer take a turn:
playerTurn = false;
setTimeout(compTurn, 1000);
const compTurn = () => {
// ...
playerTurn = true;
};
board.addEventListener('click', (e) => {
if (!playerTurn) return;
});
我在玩井字游戏。
我加入了一个 setTimeout 函数,这样在计算机开始移动之前,它看起来像是在“思考”,然后计算机才真正在棋盘上留下标记。
然而,我注意到当计算机在“思考”时,我可以采取行动,从而打破了让对手先采取行动然后我可以采取另一个行动的目的(如果这有意义的话)
示例:
(轮到我了)我用圆圈标记了一个方框
(电脑转)电脑'thinks'...
- 我在电脑思考的时候出手
- 我的移动在计算机移动之前在棋盘上留下了标记,这意味着在 setTimeout 持续时间内仍会调用函数。
如何防止这种情况发生?这可能吗?
setTimeout(compTurn, 1000)
在玩家轮到你的点击监听器中,检查玩家是否被允许先玩。在安排 compTurn
时切换布尔值,并在 compTurn
完成时将其关闭:
// Start of game:
let playerTurn = true;
// ...
// Make computer take a turn:
playerTurn = false;
setTimeout(compTurn, 1000);
const compTurn = () => {
// ...
playerTurn = true;
};
board.addEventListener('click', (e) => {
if (!playerTurn) return;
});