Node.js承诺中的readline

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js承诺中的readline相关的知识,希望对你有一定的参考价值。

我正在尝试使用node.js包读取线在命令行上获取用户输入,并且我想通过promises管道输入的输入。但是,输入永远不会通过当时的链。我认为这个问题可能来自于回调方法中的promise已经完成,但我不知道如何解决这个问题。

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

import rlp = require('readline');

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

let prom = new Promise((fulfill, reject) => {
    rl.question('Enter input: ', input => rl.close() && fulfill(input));
});

prom.then(result => {console.log(result); return prom})
    .then(result => {console.log(result); return prom})
    .then(result => console.log(result));

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

提前致谢!

答案

一旦你的承诺得到解决,就再也没有等待的了。我还将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() });

以上是关于Node.js承诺中的readline的主要内容,如果未能解决你的问题,请参考以下文章

node.js 中的嵌套承诺是不是正常?

Node.js JavaScript 片段中的跳过代码

Node.js 核心中的承诺 [重复]

如何在 node.js 中的特定持续时间后强制解决承诺? [复制]

Node.js 承诺会间歇性地失败,即使在处理时也是如此

如何遍历 node.js 中的一系列承诺?