在终端中首次输入后挂起读取线

时间:2017-12-06 13:29:45

标签: node.js readline

使用Node版本8.1.0。

正在阅读有关readline的文档:https://nodejs.org/docs/latest-v8.x/api/readline.html

陈述close方法并说明:

  

readline.Interface实例应该被认为是“已完成”   一旦'关闭'事件被发出。

很自然地,我会打开一个新的界面,就像我在我的例子中所做的那样。

const readline = require('readline');

function question(question, defaultAnswer) {
    // Create the interface
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
    });
    return new Promise((resolve, reject) => {
        rl.question(question, (answer) => {
            // Relinquished control over the input and output streams
            rl.close();
            if (answer.length === 0) {
                resolve(defaultAnswer);
            } else {
                resolve(answer);
            }
        });
    });
}

(async () => {
    let answer;
    answer = await question('1? [y] ', 'y');
    console.log('answer', answer);
    answer = await question('2? [y] ', 'y');
    console.log('answer', answer);
    answer = await question('3? [y] ', 'y');
    console.log('answer', answer);
})();

输出:

$ node test.js
1? [y] y
answer y
2? [y]
然而,它挂起了。我不知道为什么?不幸的是,目前坐在Mac上,我不知道这是否会影响到这一点。

1 个答案:

答案 0 :(得分:1)

所以我在这里提交了一个错误报告:https://github.com/nodejs/node/issues/17495

这是Node 8.1.0的已知问题。从8.1.0更改为任何其他版本使其工作。