JavaScript - 如何等待/ SetTimeOut / Sleep / Delay

时间:2016-02-22 00:43:40

标签: javascript delay

这也是我的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);
    }

2 个答案:

答案 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)