Javascript 承诺不起作用:代码在任务尚未完成时执行
编辑:你能发现这个扑克游戏中的漏洞吗?这快把我逼疯了。这个承诺不起作用。另外,最多可与9名玩家玩扑克。虽然我指定了球员的数量,但我还是设法有了10名球员。我不知道发生了什么事。有人能帮我吗Javascript 承诺不起作用:代码在任务尚未完成时执行,javascript,Javascript,编辑:你能发现这个扑克游戏中的漏洞吗?这快把我逼疯了。这个承诺不起作用。另外,最多可与9名玩家玩扑克。虽然我指定了球员的数量,但我还是设法有了10名球员。我不知道发生了什么事。有人能帮我吗 function playerActs(i, s) { return new Promise(resolve => { console.log(`player ${i+1} took ${(s/1000).toFixed(2)} secs to decide`); resolve('
function playerActs(i, s) {
return new Promise(resolve => {
console.log(`player ${i+1} took ${(s/1000).toFixed(2)} secs to decide`);
resolve('finished');
});
}
async function round() {
let hasEveryoneSpoken = false;
let hasEveryoneChecked = false;
let isEveryoneAllIn = false;
let stopBettingRound = false;
let nbPlayers = 9;
let i = 0;
while (!stopBettingRound) {
let delay = (Math.random() * 1000 * 5);
// wait until the player take a decision
let res = await setTimeout(playerActs, delay, i, delay);
console.log(res);
// dummy condition to exit loop
if (i == nbPlayers) hasEveryoneSpoken = true;
stopBettingRound =
hasEveryoneSpoken || hasEveryoneChecked || isEveryoneAllIn;
i++;
}
}
round();
您不能像这样使用
setInterval
,因为与promission一样,它不会阻止代码执行,因此代码直接进入您对resolve
的调用
我建议您将整个倒计时逻辑重构为它自己的函数,该函数还包含一个承诺,您可以等待
也就是说,如果用户在等待时继续下一步操作,我也看不到任何逻辑允许您取消倒计时。目前,我的重点是阻止程序的执行,而人必须进行交互:)这就是问题所在-您不能阻止执行。您可以
等待
承诺,该承诺的解决方案取决于计时器是否过期(在这种情况下,您可以拒绝
)或用户输入是否发生。