Promise中的Node.js readline

Luk*_*ach 2 callback readline node.js promise

我正在尝试使用node.js包readline在命令行上获取用户输入,并且我想通过promise来输入输入。但是,输入永远不会通过then链。我认为问题可能出在回调方法中实现了诺言这一事实​​,但我不知道该如何解决。

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

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));
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Mir*_*ili 8

readlineNode.js 17 为module提供了新的基于 Promise 的 API

import { createInterface } from 'node:readline/promises'
import { stdin, stdout } from 'process'

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

const answer = await rl.question('What do you think of Node.js? ')

console.log('Thank you for your valuable feedback:', answer)

rl.close()
Run Code Online (Sandbox Code Playgroud)

https://nodejs.org/api/readline.html#readline


Ben*_*dai 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() });
Run Code Online (Sandbox Code Playgroud)