首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用node.js的readline模块接受两个连续的输入?

如何使用node.js的readline模块接受两个连续的输入?
EN

Stack Overflow用户
提问于 2016-04-11 14:08:39
回答 8查看 35.4K关注 0票数 20

我正在创建一个程序,从命令行接受两个数字的输入,然后在node.js中显示sum。我使用readline模块来获取stdin。下面是我的代码。

代码语言:javascript
复制
const readline = require('readline');

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

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

rl.question('Please enter the first number', (answer1) => {
    r2.question('Please enter the second number', (answer2) => {
        var result = (+answer1) + (+answer2);
        console.log(`The sum of above two numbers is ${result}`);
    });
    rl.close();
});

这个程序只显示“请输入第一个数字”,当我输入一个像5这样的数字时,第二个输入也需要5,并显示答案10

它根本不会问第二个问题。请检查一下,并告诉我问题出在哪里。如果有更好的方法接受多个输入,请告诉我。

我是node.js的新手

EN

回答 8

Stack Overflow用户

发布于 2018-02-14 23:33:03

嵌套的代码/回调很难阅读和维护,这里有一种更优雅的方式来使用Promise来提出多个问题

节点8+

代码语言:javascript
复制
'use strict'

const readline = require('readline')

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

const question1 = () => {
  return new Promise((resolve, reject) => {
    rl.question('q1 What do you think of Node.js? ', (answer) => {
      console.log(`Thank you for your valuable feedback: ${answer}`)
      resolve()
    })
  })
}

const question2 = () => {
  return new Promise((resolve, reject) => {
    rl.question('q2 What do you think of Node.js? ', (answer) => {
      console.log(`Thank you for your valuable feedback: ${answer}`)
      resolve()
    })
  })
}

const main = async () => {
  await question1()
  await question2()
  rl.close()
}

main()
票数 42
EN

Stack Overflow用户

发布于 2016-08-02 18:34:10

不需要另一个变量,只需像这样使用:

代码语言:javascript
复制
const readline = require('readline');

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

rl.question('Please enter the first number : ', (answer1) => {
    rl.question('Please enter the second number : ', (answer2) => {
        var result = (+answer1) + (+answer2);
        console.log(`The sum of above two numbers is ${result}`);
        rl.close();
    });
});
票数 23
EN

Stack Overflow用户

发布于 2019-08-09 00:18:43

我会在一个异步函数中提出问题,并包装readline,类似于Jason上面是如何做的。虽然代码稍微少了一点:)

代码语言:javascript
复制
const readline = require('readline');
rl = readline.createInterface({
    input : process.stdin,
    output : process.stdout 
 });

function question(theQuestion) {
    return new Promise(resolve => rl.question(theQuestion, answ => resolve(answ)))
}

async function askQuestions(){
    var answer = await question("A great question")
    console.log(answer);
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36540996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档