Почему процесс Node process.stdin.on («читаемый») запускает мой обратный вызов один раз? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть следующий код:

process.stdin.on('readable', () => {
  const input = process.stdin.read();
  console.log(input);
});

В учебнике обратный вызов, кажется, срабатывает в al oop, но когда я пытаюсь это сделать, он вызывается только один раз, а затем завершается. Почему это происходит? Версия моего узла 13.12.0

1 Ответ

1 голос
/ 28 апреля 2020

Как только событие readable сработает, оно не сработает снова, пока поток не достигнет конца или пока вы не вызовете .read() и не получите null назад (больше нет данных для чтения). Как только вы получите null, он сработает снова, когда появится больше данных.

Вот почему пример кода в do c делает это:

const readable = getReadableStreamSomehow();
readable.on('readable', function() {
  // There is some data to read now.
  let data;

  while (data = this.read()) {
    console.log(data);
  }
});

В общем, это более сложный способ использования потоков. Если вы используете их в текущем режиме, таком как это:

process.stdin.on('data', (input) => {
  console.log(input);
});

Тогда он будет просто звонить вам всякий раз, когда поступают данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...