这也是我的Rock Paper Scissors游戏。
目前状态下,用户无法看到发生了什么,因为在提示输入(Rock,Paper或Scissors)后,他们会立即被重新发布。
问题是如何让程序延迟,以便他们至少可以阅读正在进行的操作。
我已经读过JavaScript中不存在sleep()。我尝试使用setTimeOut但是setTimeOut导致程序无法运行。
关于如何在第一次用户输入后延迟下一个用户输入的任何想法。这可以通过任何JS解决方案来完成。
这是我现在的代码
function playUntil(rounds) {
var playerWins = 0;
var computerWins = 0;
setTimeout(function() {
while ((playerWins < rounds) && (computerWins < rounds)) {
var computerMove = getComputerMove();
var winner = getWinner(playerMove, computerMove);
console.log('The player has chosen ' + playerMove + '. The computer has chosen ' + computerMove);
if (winner === "Player") {
playerWins += 1;
}
else if (winner === "Computer") {
computerWins += 1;
}
if ((playerWins == rounds) || (computerWins == rounds)) {
console.log("The game is over! The " + winner + " has taken out the game!");
console.log("The final score was Player - [" + playerWins + "] to Computer - [" + computerWins + "]");
}
else {
console.log(winner + ' takes the round. It is now ' + playerWins + ' to ' + computerWins);
}
}
return [playerWins, computerWins]
;},5000);
}
答案 0 :(得分:7)
您不能在setTimeout,setInterval或其他子函数上返回父函数的值,因为它具有不同的范围。
您可以使用promises代替: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
为:
function x () {
setTimeout(function () {
return "anything";
}, 5000);
}
使用承诺:
function x () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve("anything");
}, 5000);
});
}
然后你可以调用如下函数:
x()
.then(
function (result) {
alert(result); // Do anything.
}
);
PD:我的英语不好,对不起!。
答案 1 :(得分:-3)
这花了我很长时间才弄明白,但这是解决方案。
创建此功能
function sleep(miliseconds) {
var currentTime = new Date().getTime();
while (currentTime + miliseconds >= new Date().getTime()) {
}
}
将此添加到我想要延迟的代码中
sleep(3000)