Javascript同步控制台提示

时间:2016-05-11 17:39:09

标签: javascript node.js synchronous

我试图通过在控制台上制作一个tic tac toe游戏来开始使用Javascript。这将需要一个while循环来接收来自用户的移动。

事实证明这比我预期的要困难得多。有一种我想念的简单方法。

我尝试过使用async.whilst和sync-prompt。前者只是让我进入了一个无限循环,当我尝试使用npm install下载它时后者出错了。感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:1)

您不需要使用库。只需使用node的内置readline

以下是他们的例子:

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('What do you think of Node.js? ', (answer) => {
  // TODO: Log the answer in a database
  console.log('Thank you for your valuable feedback:', answer);

  rl.close();
});

答案 1 :(得分:0)

我发现了prompt-sync。这与你试过的那个不一样。在任何情况下,如果由于某种原因导致npm安装失败,您始终可以从its github page获取源代码

这不是一个完美的解决方案,至少对我而言,因为它没有在答案中捕捉重音字符或西班牙语字符。

无论如何,这在节点上似乎不是一件容易的事。

更新:我找到了另一种方法,至少就我的目的而言,从节点8开始,使用async和await结合IIFE:

(async function() {
    const readline = require('readline');
    const rl = readline.createInterface({
        input: process.stdin,   
        output: process.stdout 
    });  

    function prompt(message) {
        return new Promise((resolve, reject) => {
            rl.question(message, (answer) => {
                resolve(answer);
            });
        }); 
    }  

    var answer = await prompt("What do you have to say? ");
    console.log("\nYou answered: \n" + answer);
    rl.close(); 
})();