Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何等待/设置超时/睡眠/延迟_Javascript_Delay - Fatal编程技术网

JavaScript-如何等待/设置超时/睡眠/延迟

JavaScript-如何等待/设置超时/睡眠/延迟,javascript,delay,Javascript,Delay,这又是我的石头剪刀布游戏 在当前状态下,用户无法看到发生了什么,因为在提示输入(石头、布或剪刀)后,他们会立即被重新提示 问题是我怎样才能使程序延迟,这样他们至少可以读取正在发生的事情 我已经读到JavaScript中不存在sleep()。我试图使用setTimeOut,但是,setTimeOut导致程序无法运行 关于如何在第一次用户输入后延迟下一次用户输入的任何想法。这可以通过任何JS解决方案完成。 这是我现在的密码 function playUntil(rounds) { v

这又是我的石头剪刀布游戏

在当前状态下,用户无法看到发生了什么,因为在提示输入(石头、布或剪刀)后,他们会立即被重新提示

问题是我怎样才能使程序延迟,这样他们至少可以读取正在发生的事情

我已经读到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);
    }
函数播放直到(轮){
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)