23

stringBufferまたはの可能性のあるオブジェクトを受け取る関数がありますStream

次のように、オブジェクトが Buffer であるかどうかを簡単にテストできます。 if (x instanceof Buffer)

オブジェクトがストリームかどうかをテストする最良の方法は何ですか? ノードにストリーム基本クラスがないようです - ありますか?

何を探すべきですか?

4

3 に答える 3

13

Readableあなたができることのために:

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
于 2015-02-17T14:42:58.580 に答える
10

すべてのストリームが および を使用して実装されているわけではありませstream.Readablestream.Writable

process.stdout instanceof require("stream").Writable; // false
process.stdout instanceof require("readable-stream").Writable; // false

より良い方法は、機能を個別に確認することread(), write(), end()です。

var EventEmitter = require("events");

function isReadableStream(test) {
    return test instanceof EventEmitter && typeof test.read === 'function'
}

function isWritableStream(test) {
    return test instanceof EventEmitter && typeof test.write === 'function' && typeof test.end === 'function'
}

いつでも参照できます: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/node.d.ts#L252

于 2016-05-04T08:38:12.857 に答える
8

探しているプロトタイプは、stream.Readable読み取り可能なストリームとstream.Writable書き込み可能なストリームのストリームです。をチェックするときと同じように機能しますBuffer

于 2013-06-09T13:27:43.587 に答える