Nodejs: проверить, является ли переменная читаемым потоком
Как я могу проверить, является ли var читаемым потоком в Nodejs?
Пример:
function foo(streamobj){
if(streamobj != readablestream){
// Error: no writable stream
}else{
// So something with streamobj
}
}
Я пробовал
if (!(streamobj instanceof stream.Readable)){
Но чем я получаю ReferenceError: поток не определен
Ответы
Ответ 1
Ваша проблема, безусловно, в том, что вам не требуется stream
. Но. instanceof
не является хорошим методом проверки, является ли переменная читаемым потоком. Рассмотрим следующие случаи:
- объект может быть потоком старого стиля (экземпляр
stream.Stream
);
- объект может быть только эмиттером с событиями
data
и end
;
- объект может быть экземпляром
Readable
из внешнего модуля (https://github.com/isaacs/readable-stream);
Самый лучший способ - утиная печать. В принципе, если вы собираетесь в поток pipe
, проверьте, имеет ли он метод pipe
, если вы собираетесь прослушивать события, проверьте, есть ли метод on
и т.д.
Ответ 2
Кажется, что вы забыли потребовать модуль ядра потока.
var stream = require('stream');
// somewhere in the file
if (!(streamobj instanceof stream.Readable)) {
// Your logic
}
Ответ 3
Используйте is-stream для этого:
var isStream = require('is-stream');
if (isStream.readable(myStream)) {
do();
}
Ответ 4
Убедитесь, что вы сделали:
var stream = require('stream');
Функция может быть примерно такой:
function isReadableStream(obj) {
return obj instanceof stream.Stream &&
typeof (obj._read === 'function') &&
typeof (obj._readableState === 'object');
}
console.log(isReadableStream(fs.createReadStream('car.jpg'))); // true
console.log(isReadableStream({}))); // false
console.log(isReadableStream(''))); // false