【问题标题】:How to get JavaScript console user input working (node.js)?如何让 JavaScript 控制台用户输入工作(node.js)?
【发布时间】:2015-04-28 08:54:05
【问题描述】:

这是我的一些作业。我希望它读取用户输入,然后创建两个对象,根据用户输入为它们提供值。这是我的代码,从 JS 文件的顶部开始:

console.log("Type 'help' for commands");
console.log("Square numbers:");
console.log("Enter player 1 name");

var player1 = new Player(readLine());
var player2 = new Player(readLine());

console.log("logging name after making players" + player1.name);

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

    rl.question("Enter player name? ", function(answer) {
        inputText = answer;
        console.log("Player name:", answer);
        rl.pause();
    });
    return inputText;
}

这是我得到的输出:http://oi60.tinypic.com/9tn7nn.jpg

我习惯于 C# 和 Java,在这些语言中,readline() 会等待输入,然后使用我输入的任何内容创建对象,然后再进入下一行。虽然不是在 JS 中!它只是继续,在我输入任何内容之前调用 readline() 两次(因此打印两次“prompt>”),然后记录播放器 1 的名称(在输入之前,因此未定义)。然后它等待我输入一些内容,一旦我输入一些内容,它就会将两个玩家都设置为一个名字,然后结束程序。

是否有可能做我想做的事情?有没有另一种方法可以让输入工作而不跳过它并运行其余代码?

提前致谢!

【问题讨论】:

  • 你考虑过readline 还是你必须自己为作业写?
  • sys 已被弃用很久,请使用util
  • @loganfsmyth 谢谢大家,我已将其更改为节点的 readline,但问题仍然存在,它运行 readline() 两次并在我输入任何内容之前继续执行其余代码。跨度>
  • 您能更新问题中的代码吗?您现有的代码存在许多问题,使用 Node 的 readline 演示正确的方法会容易得多。
  • @loganfsmyth 已更新。

标签: javascript node.js input console


【解决方案1】:

您对 JavaScript 做了几个错误的假设。主要问题是rl.question(...) 向用户显示提示,但它无法阻止 JS 线程本身,因此您的readline() 函数将立即以undefined 退出,因为function(answer) 尚未运行,因为用户尚未输入任何内容。构建代码的一种简单方法是:

var readline = require('readline');

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

rl.write("Type 'help' for commands\n");
rl.write("Square numbers:\n");

function createPayer(number, callback){
    rl.question("Enter player " + number + " name? ", function(answer) {
        var player = new Player(answer);

        // Call the callback function once the player is created.
        callback(player);
    });
}

createPayer(1, function(player1){
    createPayer(2, function(player2){
        console.log("logging name after making players" + player1.name);
        console.log("logging name after making players" + player2.name);

        // Then call player logic you have from in here.
    });
});

关键是这里没有明确的“等待”。 JS 代码主要是基于事件和回调的,因此您无需等待用户输入内容,而是排队等待用户输入内容后调用的函数。

【讨论】:

  • 完美运行。我已经对其进行了修改,以使玩家成为数组的一部分,这将帮助我进一步了解这一点,但看到这一点并试图理解它有助于加载,非常感谢您的时间和精力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多