JavaScript-如何等待/设置超时/睡眠/延迟
这又是我的石头剪刀布游戏 在当前状态下,用户无法看到发生了什么,因为在提示输入(石头、布或剪刀)后,他们会立即被重新提示 问题是我怎样才能使程序延迟,这样他们至少可以读取正在发生的事情 我已经读到JavaScript中不存在sleep()。我试图使用setTimeOut,但是,setTimeOut导致程序无法运行 关于如何在第一次用户输入后延迟下一次用户输入的任何想法。这可以通过任何JS解决方案完成。 这是我现在的密码JavaScript-如何等待/设置超时/睡眠/延迟,javascript,delay,Javascript,Delay,这又是我的石头剪刀布游戏 在当前状态下,用户无法看到发生了什么,因为在提示输入(石头、布或剪刀)后,他们会立即被重新提示 问题是我怎样才能使程序延迟,这样他们至少可以读取正在发生的事情 我已经读到JavaScript中不存在sleep()。我试图使用setTimeOut,但是,setTimeOut导致程序无法运行 关于如何在第一次用户输入后延迟下一次用户输入的任何想法。这可以通过任何JS解决方案完成。 这是我现在的密码 function playUntil(rounds) { v
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);
}
函数播放直到(轮){
var-playerWins=0;
var=0;
setTimeout(函数(){
while((playerWins
不能在setTimeout、setInterval或其他子函数上返回父函数的值,因为它们的作用域不同
你可以改用承诺:
坏的:
使用承诺:
function x () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve("anything");
}, 5000);
});
}
然后可以调用如下函数:
x()
.then(
function (result) {
alert(result); // Do anything.
}
);
对不起,我英语不好 我花了很长时间才弄明白,但解决办法是这样的 创建此函数
function sleep(miliseconds) {
var currentTime = new Date().getTime();
while (currentTime + miliseconds >= new Date().getTime()) {
}
}
将此添加到我希望延迟的代码中
sleep(3000)
“我试图使用setTimeOut,但是,它抛出了一个错误”。。。这个错误是?你展示的代码甚至没有使用
setTimeout
。如果你对井字游戏的输入是石头、布和剪刀,那么你就有比这更大的问题。男人们不会这么快否决一个问题。现在它根本不会得到回答,这是一个非常有效的问题。谢谢你第一个非巨魔的回答@RobG。现在研究一下这个问题谢谢jgdev,我现在正在检查这个解决方案!:)虽然承诺是一个好主意,但它们是ECMAScript 2015中的一项新功能,因此在许多正在使用的浏览器(包括IE)中不受支持。setTimeout和setInterval在任何地方都有效。是的,很抱歉我调查了这个问题,人们不推荐它。对不起,杰格德夫。不过我真的很感激这个主意!我仍在试图弄清楚setTimeout或setInterval如何工作。您可以在这些浏览器中使用polyfill(尽管现在所有主要浏览器都支持),请不要这样做-它会在睡眠时冻结整个页面。
sleep(3000)