【问题标题】:Take multiple inputs from user从用户那里获取多个输入
【发布时间】:2019-06-19 12:24:48
【问题描述】:

我想从用户那里获取用户输入。我通过从 node.js 文档中获取代码创建了一个函数来做到这一点。但我无法接收多个用户输入。我怎样才能做到这一点?这是目前为止的代码。

function getUserInput() {
        rl.question('Please input a letter: ', (answer) => {
        console.log('Letter entered: ${answer}');
        rl.close();
        }); 
    }

//getUserInput();

var k=0; 
while ( k < 3 ){
        getUserInput();
        k++;
    } 

我希望以 3 个用户输入为例。我想接受用户输入。使用上面的代码,我只能接受一个用户输入。我认为将函数添加到循环中以便它可以工作。我正在寻找对我的代码进行任何修改,以便它可以工作,因此我可以接受多个用户输入。

【问题讨论】:

  • 嘿!欢迎来到 StackOverflow!请检查这个:codereview.stackexchange.com/questions/134048/…
  • 没有提供足够的信息来清楚地了解您要达到的目标。你能提供更多信息吗?
  • 让我写在这里,我将添加到描述中。我想接受用户输入。使用上面的代码,我只能接受一个用户输入。我认为将函数添加到循环中以便它可以工作。我正在寻找对我的代码进行任何修改,以便它可以工作,因此我可以接受多个用户输入。
  • 不一样。我看过那个链接

标签: javascript node.js


【解决方案1】:

Inquirer 可能是您要查找的内容,假设您尝试在命令行上获取用户输入。

来自回购本身的描述:

Inquirer.js 致力于成为 Node.js(也许还有“CLI Xanadu”)的易于嵌入且美观的命令行界面。

Inquirer.js 应该可以简化

  • 提供错误反馈
  • 提问
  • 解析输入
  • 验证答案
  • 管理分层提示

另外,这里有一个如何使用它的例子:

const inquirer = require('inquirer');

const questions = [
  {
    type: 'input',
    name: 'first_name',
    message: "What's your first name"
  }, {
    type: 'input',
    name: 'last_name',
    message: "What's your last name",
    default: function() {
      return 'Doe';
    }
  }
];

inquirer.prompt(questions).then(answers => {
  console.log(JSON.stringify(answers, null, '  '));
});

干杯。

【讨论】:

  • 我正在检查它。像我开始做的那样,有没有更简单的方法可以通过循环来实现这一点?谢谢:)
  • 就目前而言,这看起来更像是评论而不是答案。提供有关“询问者”所做工作的更多信息将有助于 OP,而不仅仅是提供外部链接。举例说明它是如何工作的也是有益的。
  • 是的,实际上这就是我要找的。也许对我的代码进行任何修改都会很棒。我已经处理了好几个小时我无法弄清楚问题是什么。谢谢
【解决方案2】:

我认为问题在于 rl.question 在继续之前等待输入,但 while 循环没有。我认为,这是一个简单的节点 cli,可以满足您的需求。只需将此代码保存在名为 index.js 的文件中,然后转到目录并输入:node index.js

 // Dependencies
 var readline = require('readline');

 var cli = {};

 // Init function
 cli.init = function(){
   // Send the start message to the console in magenta
   console.log('\x1b[35m%s\x1b[0m',"The CLI is running");

   // Start the interface
   var _interface = readline.createInterface({
     input: process.stdin,
     output : process.stdout,
     prompt : '>'
   });

   var arrayOfInputs = [];
   var k = 0;
   var max = 3;
   cli.getUserInput = function(){
     _interface.question("Ask Something? ", function(str){
       k++;
      arrayOfInputs.push(str);
      if(k < max){
        cli.getUserInput();
      } else {
        console.log(...arrayOfInputs);
      }
    });
   };

   cli.getUserInput();

 };

 cli.init();

【讨论】:

  • 我认为如果您将getUserInput(n+1); 更改为getUserInput(++n);,Ben Stern 的答案也会起作用。另外,将初始调用更改为 getUserInput(0)getUserInput(1) 或者您将获得 4 个输入,因为在测试 n 之前调用了 rl.question get。
  • 好的,谢谢。让我检查一下。 (编辑)它看起来像它的工作。谢谢,我会及时通知你节目的阶段;)
  • 为什么这对 OP 有效而我的无效?我同意一对一的观点,但在其他方面这在功能上是等效的。
  • 你是对的,本。您的代码确实有效。我不知道为什么它对 OP 不起作用,只是它运行了 4 次,这可能导致错误地假设它不能正常工作。我想我在写我的代码之前没有尝试过你的代码。之后我只是看了看,并试图向 OP 指出你的方法是一个很好的方法。
【解决方案3】:

这似乎使用了类似 Promises API 的东西。

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


function getUserInput(n) {
    rl.question('Please input a letter: ', (answer) => {
        console.log(`Letter entered: ${answer}`);
        if (n < 3) {
            getUserInput(n+1);
        } else {
            rl.close();
        }
    }); 
}

getUserInput(1);

当我运行它时,会发生这种情况:

$ node getinput.js
Please input a letter: a
Letter entered: a
Please input a letter: b
Letter entered: b
Please input a letter: c
Letter entered: c

【讨论】:

  • 您提供的代码不起作用。这是同样的事情。 :(
  • 这对我来说很好用。最初,它发出 4 个提示而不是 3 个,但我通过上面建议的用 1 调用 getUserInput 来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-14
  • 2013-01-18
  • 2019-04-11
  • 2021-05-09
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多