【发布时间】:2018-07-05 20:41:44
【问题描述】:
所以我需要在开始游戏之前先提示用户一些信息。游戏是第二个标准输入,然后它一直循环到游戏结束,要求输入,做它的事情等等,直到有人获胜。
我无法获得一次与连续工作:
先运行
process.openStdin().on('data', (name) => {
if(firstRun){
console.log("Please enter your first name");
Computer.move();
firstRun = false;
}
process.openStdin().on('data', (move) => {
Human.move(move);
});
});
问题是我注意到外部标准输入运行,得到一个 res,但随后它将它的 res 传递给我不想要的内部标准输入......
我确定我可能不会这样做,但我不知道还能尝试什么。
让我给你一些我尝试过的新代码
const play = async () => {
await promptForName();
await runGame();
}
function promptForName(){
return new Promise((resolve, reject) => {
console.log("enter a your name:")
process.openStdin().on('data', (name) => {
console.log(`symbol entered: ${name}`)
process.stdin.removeListener("data", promptForName);
resolve()
});
})
}
function runGame(){
return new Promise((resolve, reject) => {
process.openStdin().on('data', (move) => {
console.log(`move: ${move}`)
Human.move(move);
resolve()
});
})
}
当我运行它时,第一次运行似乎正常,第二次运行但我没有得到 move 的值,也没有提示输入任何输入
【问题讨论】:
-
我不认为你正在做你认为你正在做的事情。没有多个
stdin这样的东西。此外,您从哪里获得openStdin()函数,它在node documentation 中没有记录?我看到的唯一参考是在这个问题中:Unknown method process.openStdin()。 -
@zero298 奇怪的是,process.openStdin() 可以在没有任何包的情况下工作。
-
对,我只尝试了标准输入,但它会爆炸,所以是的,openStdin 可以工作,并且在引擎盖下它只是在做一个标准的标准输入。
openStdn记录在节点站点上,但我认为没有多少人知道这一点。
标签: javascript node.js