NodeJS readline 有时会打印回第一个输入行(但并非总是如此,似乎是随机的)

Ste*_*ate 2 javascript user-input readline node.js

所以我使用 NodeJS 文档中的这个示例代码:

const readline = require('readline');
const rl = readline.createInterface(process.stdin, process.stdout);
console.log("Hello!");
rl.setPrompt('OHAI> ');
rl.prompt();

rl.on('line', (line) => {
  switch(line.trim()) {
    case 'hello':
      console.log('world!');
      break;
    default:
      console.log('Say what? I might have heard `' + line.trim() + '`');
      break;
  }
  rl.prompt();
}).on('close', () => {
  console.log('Have a great day!');
  process.exit(0);
});
Run Code Online (Sandbox Code Playgroud)

我在 Windows 上,运行 NodeJS 6.0.0。当我运行该文件时,它会写“Hello!”,然后是第一个“OHAI>”。到现在为止还挺好。现在我尝试编写一个任意的“asd”。当我按 Enter 时,会发生以下两种情况之一:

  1. 它打印:

阿斯达

说什么?我可能听说过“asd”

上海>

  1. 它打印

说什么?我可能听说过“asd”

上海>

这仅发生在第一个输入行上。这似乎是完全随机的,但是,如果在我键入 之后node test.js,我按回车键的速度足够快,有时我会在第一个“OHAI>”之前得到一个换行符,并且它不会打印我的任意输入。

这个例子有什么问题吗?它是 NodeJS 中的错误吗?即使它无法修复,我也很高兴知道是什么原因造成的,因为我已经拉了几个小时的头发了。

Sha*_*Fax 9

这应该可以解决问题。

const rl = readline.createInterface({
    input: process.stdin, 
    output: process.stdout,
    terminal: false
});
Run Code Online (Sandbox Code Playgroud)