首页 > 解决方案 > 使用 Node JS 等待玩家输入

问题描述

我使用 HTML5(客户端)和 Node(服务器)为 Facebook 创建了一个多人扑克游戏。

我正在编写服务器代码以允许玩家跟注、加注、弃牌等。服务器向 HTML5 客户端发送一条消息,请求特定玩家跟注、加注等,但 Javascript 的本质是它的非阻塞。我需要让 Node 等待玩家回复,然后再转到牌桌上的下一位玩家。

我看过 setTimeout、promise、匿名函数,我完全迷失了。

标签: javascriptasynchronoussocket.iowait

解决方案


我设法解决了我自己的问题。在 Javascript 代码继续之前,我需要等待用户下注。我通过使用 Javascript 承诺和计时器实现了这一点。

  let bet_marker = false;

  // socket.io response from client
  socket.on('bet', function() {
      bet_marker = true;
  });


  const aPromise = new Promise((accept, reject) => {

    setTimeout(function() {
        clearInterval(sI1);
        reject();
    }, 1000);

    let sI1 = setInterval(function() {
        if(bet_marker == true)
        {
            clearInterval(sI1);
            accept();
        }
    }, 500);
});
try {
    console.log("User Bet");
    await aPromise;
} 
catch(e)
{   
    console.log("Time Ran Out);
    console.log(")
}

在我的代码中,我创建了一个 Promise、一个 setInterval 和一个 setTimeout。await aPromise 语句等待promise 在继续之前调用accept() 语句。setInterval 函数每 500 毫秒查看一次,以查看 bet_marker 变量是否已更改。这仅在收到客户的赌注时才会改变。一旦更改,我们就知道已经收到了一个赌注,并且调用了 accept() 函数来完成承诺。我在代码中还有一个 setTimeout 语句,它将在 10000 毫秒(10 秒)后拒绝该承诺。这给了玩家 10 秒的时间来回应他们的赌注,但如果在那段时间内没有收到赌注,则会自动弃牌。

我希望这是有道理的,因为我不是专业的程序员......


推荐阅读