2013-06-09 4 views
21

में स्ट्रीम है, मेरे पास एक ऐसा फ़ंक्शन है जो string, Buffer या Stream हो सकता है।कोई ऑब्जेक्ट परीक्षण कैसे करें यदि कोई ऑब्जेक्ट नोडजेएस

मैं आसानी से परीक्षण कर सकते हैं, तो वस्तु इतनी तरह एक बफर है: if (x instanceof Buffer)

यदि एक वस्तु एक स्ट्रीम है परीक्षण करने के लिए सबसे अच्छा तरीका क्या है? नोड में स्ट्रीम बेस क्लास नहीं दिखता है - क्या वहां है?

मुझे क्या देखना चाहिए?

उत्तर

6

प्रोटोटाइप जिसे आप ढूंढ रहे हैं वह stream.Readable पठनीय धाराओं के लिए स्ट्रीम है, और stream.Writable लिखने योग्य धाराओं के लिए है। वे उसी तरह काम करते हैं जब आप Buffer की जांच करते हैं।

+0

इस होना चाहिए लोअर केस stream.readable? यह प्रजनन कोड देने के लिए ऊपरी मामले –

11

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 
+0

thx के साथ संपत्ति प्रतीत नहीं होता है, इसे https://github.com/loveencounterflow/hollerith परीक्षण – flow

4

नहीं सभी धाराओं लागू किया जाता है stream.Readable और stream.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' 
} 

तुम हमेशा के लिए reffer कर सकते हैं: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/node.d.ts#L252

+0

में उपयोग किया जाता है यह मानना ​​सुरक्षित है कि यह कोड ('process.stdout exampleof आवश्यकता है ("स्ट्रीम")। लिखने योग्य; ') यह मानने का सबसे अच्छा तरीका है कि एक स्ट्रीम 'process.stdout' है? – hisabimbola

+0

@hisabimbola नहीं बस 'exampleof आवश्यकता ("घटनाओं") का उपयोग करें। EventEmitter' और' लिखें 'और' end' गुणों के लिए जांचें। कुछ और एक बिंदु या दूसरे पर असफल हो जाएगा। – Walter

+0

जो मैं करने की कोशिश कर रहा हूं वह यह है कि एक लिखने योग्य धारा बिल्कुल 'process.stdout' परीक्षण नहीं करती है, अगर यह एक लिखने योग्य धारा है। इस बारे में अधिक जानकारी [यहां] (http://stackoverflow.com/q/41521709/4151025) – hisabimbola

संबंधित मुद्दे