2014-06-08 8 views
16

सीखना node.js. ट्रम्पेट एक धारा को अपने आप को वापस पाइप करके काम करता है, जाहिर है, इसलिए संसाधित डेटा आउटपुट हो सकता है। यह मुझे कोई समझ नहीं आता है, क्योंकि ऐसा लगता है कि एक धारा के दोनों सिरों को स्वयं ही जोड़ना है। ट्रम्पेट पूर्व और पोस्ट संसाधित डेटा के बीच अंतर कैसे करता है? यानी, loud.pipe(...).pipe(loud) क्यों प्रसंस्करण के अनंत लूप के कुछ रूप में नहीं है?ट्रिपेट के साथ स्वयं स्ट्रीम करने के लिए एक स्ट्रीम को पाइप कैसे करता है?

davecocoa इस GitHub पर nodeschool.io चर्चा थ्रेड पर मेरे लिए कहना था:

var trumpet = require('trumpet'); 
var through = require('through'); 
var tr = trumpet(); 

var loud = tr.select('.loud').createStream(); 
loud.pipe(through(function (buf) { 
    this.queue(buf.toString().toUpperCase()); 
})).pipe(loud); 

process.stdin.pipe(tr).pipe(process.stdout); 

उत्तर

17

मैं ठीक उसी भ्रम था। नीचे से https://github.com/nodeschool/discussions/issues/346


एक उद्धरण मुझे लगता है कि आप दो धाराओं loud और tr भ्रमित हो सकता है।

tr मुख्य तुरही धारा

  • यह है एक को बदलने धारा
  • यह इनपुट के रूप में एचटीएमएल लेता है (एक पाइप की तरह इनपुट और आउटपुट है)
  • यह एचटीएमएल आउटपुट है
  • हम stdin कनेक्ट इसके इनपुट में, और हम इसके आउटपुट को stdout

डब्ल्यू ई tr पूछ वर्ग जोर

  • यह एक द्वैध धारा है साथ HTML तत्वों का चयन करने के द्वारा बनाई गई loud
  • यह आउटपुट (एक टेलीफोन की तरह इनपुट और आउटपुट है) या भेजता HTML तत्वों
  • यह भी HTML तत्वों को प्राप्त करता है

tr बर्ताव करता है जैसे कि जब एचटीएमएल, यह करने के लिए प्रदर्शित किया अगर वहाँ वर्ग के साथ तत्वों में तेज़ हैं, वे जो धारा आप वें बनाने के लिए बनाया के माध्यम से करने के लिए उन्हें भेजता loud से उत्पादन कर रहे हैं कि, ई टेक्स्ट अपरकेस, जो उन्हें loud के इनपुट पर वापस भेजता है, जहां उन्हें tr में मूल रूप से प्राप्त और आउटपुट tr से पुन: सम्मिलित किया जाता है।

मुझे लगता है कि ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि, हालांकि loudtr के साथ एक महत्वपूर्ण कनेक्शन है, वे वास्तव में एक साथ पाइप नहीं किए जाते हैं।


+1

यह एक महान स्पष्टीकरण है! क्या आप तुरही दस्तावेज में योगदान दे सकते हैं? –

3

मैं भी उलझन में था और मैं इसे फिर से व्यक्त होता मेरे शब्दों के साथ: जो एक संयुक्त ReadStream और WriteStream

इस स्ट्रीम से और कुछ नहीं है

tr.select('.loud').createStream() एक डुप्लेक्स-स्ट्रीम बनाता है प्राप्त करता है सभी अपने रीडस्ट्रीम में से मेल खाता है। आप WriteStream को लिखते हैं, तुरही के रूप में यह लेता है मैच की जगह

यह उसी तरह से मेरे लिए काम करता है:

// create trumpet stream 
var tr = trumpet(); 

// create stream with selected elems 
var trumpetSelector = tr.select('.loud'); 
var upperOut = trumpetSelector.createReadStream(); 
var upperIn = trumpetSelector.createWriteStream(); 
upperOut.pipe(new UpperCaseTransformer()).pipe(upperIn); 

कृपया मुझे सही कर अगर मैं गलत हूँ!

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

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