javascript - 使用 Node JS 等待玩家输入
问题描述
我使用 HTML5(客户端)和 Node(服务器)为 Facebook 创建了一个多人扑克游戏。
我正在编写服务器代码以允许玩家跟注、加注、弃牌等。服务器向 HTML5 客户端发送一条消息,请求特定玩家跟注、加注等,但 Javascript 的本质是它的非阻塞。我需要让 Node 等待玩家回复,然后再转到牌桌上的下一位玩家。
我看过 setTimeout、promise、匿名函数,我完全迷失了。
解决方案
我设法解决了我自己的问题。在 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 秒的时间来回应他们的赌注,但如果在那段时间内没有收到赌注,则会自动弃牌。
我希望这是有道理的,因为我不是专业的程序员......
推荐阅读
- android - Android SDK 中 FetchedAppGateKeepersManager 中的 Facebook 错误崩溃
- javascript - 照片上传的描述框输入
- finance - decimal 和 unitRef 属性如何帮助数值在 XBRL 中表示
- javascript - 如何比较 numberOfLines 道具值
来自数据的行数? - mysql - MySQL - Now() 仅将日期值插入 DateTime 列
- google-cloud-firestore - 获取 ID 与 UID 相同的 Firestore 文档失败
- regex - Grafana 正则表达式问题
- bash - 创建 TAR 存档后如何加密
- python - 在csv中查找给定长度大于某个阈值的所有唯一属性集
- java - 两个循环内的返回语句