这又是我的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);
}
Run Code Online (Sandbox Code Playgroud)
您不能在setTimeout,setInterval或其他子函数上返回父函数的值,因为它具有不同的范围.
您可以使用promises:https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
坏:
function x () {
setTimeout(function () {
return "anything";
}, 5000);
}
Run Code Online (Sandbox Code Playgroud)
使用承诺:
function x () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve("anything");
}, 5000);
});
}
Run Code Online (Sandbox Code Playgroud)
然后你可以调用函数:
x()
.then(
function (result) {
alert(result); // Do anything.
}
);
Run Code Online (Sandbox Code Playgroud)
PD:我的英语不好,对不起!
Ash*_*tit -13
这花了我很长时间才弄清楚,但这就是解决方案。
创建这个函数
function sleep(miliseconds) {
var currentTime = new Date().getTime();
while (currentTime + miliseconds >= new Date().getTime()) {
}
}
Run Code Online (Sandbox Code Playgroud)
将其添加到我想要延迟的代码中
sleep(3000)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10468 次 |
最近记录: |