Приветствую. Пытаюсь получить данные из потока.
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?
Как вариант, проверить, что process.stdin.read()
вернул что-то полезное (не null
).
Естественно, проверить надо до каста к строке, а не после. Примерно так:
process.stdin.on('readable', () => {
var chunk = process.stdin.read();
if (!chunk) {
return;
}
chunk = "" + chunk;
console.log(chunk);
});
Почему это происходит?
Событие 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-потока.
Что делать?
Тут есть сразу несколько вариантов:
Метод stream.read
возвращает null
только в одном случае. Вы можете в явном виде проверять результат stream.read
на это значение:
process.stdin.on('readable', () => {
let chunk = process.stdin.read();
if (null !== chunk) {
console.log(chunk.toString());
}
});
Можно использовать поток в другом (flowing) режиме и получать данные по событию data
:
process.stdin.on('data', (chunk) => {
console.log(chunk.toString());
});
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Скажите плиз, почему при вложении в html --> script дальше второго условия не срабатывает? Работает только первое/одно условие, после добавления...
Не могу разобраться, почему складываются/минусуются только целые числа