Node.js承诺中的readline

时间:2017-12-27 21:28:02

标签: node.js callback promise readline

我试图使用node.js包读取线在命令行上获取用户输入,我想通过promises管道输入的输入。但是,输入永远不会通过当时的链。我认为这个问题可能来自于回调方法中的承诺得到了实现,但我不知道如何解决这个问题。

此问题的一个示例如下所示:



queue




如果在node.js中运行,问题将出现一次,输入后输入程序就会停止。我希望它等到输入第一个输入后,它应该打印此输入并要求下一个输入。

提前致谢!

3 个答案:

答案 0 :(得分:5)

一旦你的承诺得到解决,再也无法等待。我还将rl.close()调用移到了最后,因为它只需要调用一次。

const rlp = require('readline');

const rl = rlp.createInterface({
        input: process.stdin,
        output: process.stdout

});

function ask() {
    return new Promise((resolve, reject) => {
        rl.question('Enter input: ', (input) => resolve(input) );
    });
}

ask()
.then((result) => { console.log(result); return ask(); })
.then((result) => { console.log(result); return ask(); })
.then(result => { console.log(result); rl.close() });

答案 1 :(得分:1)


const readline = require('readline');

const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
const ask = (query) => new Promise((resolve) => rl.question(query, resolve));

ask('A: ').then(async (a) => {
  const b = await ask('B: ');
  const c = await ask('B: ');

  console.log(a, b, c);

  rl.close();
});

rl.on('close', () => process.exit(0));

答案 2 :(得分:0)

这是这个问题here的答案,对此我没有任何贡献。

[
    "/celebrity/actor/male", 
    "/celebrity/actor/male/female",
    "/celebrity/actor/director",
    "/celebrity/movie",
    "/celebrity/movie/user"
]