Получение данных из потока

323
08 марта 2017, 19:41

Приветствую. Пытаюсь получить данные из потока.

process.stdin.setEncoding('utf8');
process.stdin.on('readable', () => {
    let chunk = String(process.stdin.read());
    console.log(chunk);
});

Мне возвращается

Input:
10 2
Your output:
10 2
null

Как избавиться от null?

Answer 1

Как вариант, проверить, что process.stdin.read() вернул что-то полезное (не null).

Естественно, проверить надо до каста к строке, а не после. Примерно так:

process.stdin.on('readable', () => {
  var chunk = process.stdin.read();
  if (!chunk) {
    return;
  }
  chunk = "" + chunk;
  console.log(chunk);
});
Answer 2

Почему это происходит?

Событие readable выбрасывается не только в случае, когда доступна новая порция данных, но и когда достигнут конец потока:

Вот что об этом сказано в официальной документации:

The 'readable' event will also be emitted once the end of the stream data has been reached but before the 'end' event is emitted.

Далее, если вы пытаетесь читать из потока после того, как достигнут конец потока, метод stream.read вернет null.

Позволю себе снова процитировать документацию документацию:

Note: Calling stream.read([size]) after the 'end' event has been emitted will return null. No runtime error will be raised.

Иными словами, возврат null - это штатное поведение readable-потока.

Что делать?

Тут есть сразу несколько вариантов:

  1. Метод stream.read возвращает null только в одном случае. Вы можете в явном виде проверять результат stream.read на это значение:

    process.stdin.on('readable', () => {
        let chunk = process.stdin.read();
        if (null !== chunk) {
            console.log(chunk.toString());
        }
    });
    
  2. Можно использовать поток в другом (flowing) режиме и получать данные по событию data:

    process.stdin.on('data', (chunk) => {
        console.log(chunk.toString());
    });
    
READ ALSO
Javascript - вложенность в HTML

Javascript - вложенность в HTML

Скажите плиз, почему при вложении в html --> script дальше второго условия не срабатывает? Работает только первое/одно условие, после добавления...

252
Не складываются десятичные числа jquery

Не складываются десятичные числа jquery

Не могу разобраться, почему складываются/минусуются только целые числа

285
HeightmapFromTexture помогите разобраться

HeightmapFromTexture помогите разобраться

Добрый день, есть вот такой скрипт:

457