2016-04-09 26 views
2

hakkındadır. Akımlardaki örneklerin bu oldukça zarif bölümüne bakıyordum.Düğüm Okunabilir akış,

https://gist.github.com/joyrexus/10026630

şöyle okunabilir görünüyor için örnek: Beni gerçekten karıştırır neyi

var Readable = require('stream').Readable 
var inherits = require('util').inherits 

function Source(content, options) { 
    Readable.call(this, options) 
    this.content = content 
} 

inherits(Source, Readable) 

Source.prototype._read = function (size) { 
    if (!this.content) this.push(null) 
    else { 
    this.push(this.content.slice(0, size)) 
    this.content = this.content.slice(size) 
    } 
} 

var s = new Source("The quick brown fox jumps over the lazy dog.") 
console.log(s.read(10).toString()) 
console.log(s.read(10).toString()) 
console.log(s.read(10).toString()) 
console.log(s.read(10).toString()) 
console.log(s.read(10).toString()) 

// The quick 
// brown fox 
// jumps over 
// the lazy 
// dog. 


var q = new Source("How now brown cow?") 
q.pipe(process.stdout); 

akışlarının noktası bellekte aynı anda her şeyi tampon olmadığıdır Bazı asenkronizasyon sağlamak için'un yanı sıra, bir akışa ilişkin her şeyin olay döngüsünün aynı dönüşünde işlenmemesi için.

const writable = new stream.Writable({ 

     write: function(chunk, encoding, cb){ 

      console.log('data =>', String(chunk)); 

      cb(); 
     } 

    }); 


    var readable = new stream.Readable({ 

     read: function(size){ 

      // what do I do with this? It's required to implement 

     } 
    }); 

    readable.setEncoding('utf8'); 

    readable.on('data', (chunk) => { 
     console.log('got %d bytes of data', chunk.length, String(chunk)); 
    }); 

    readable.pipe(writable); 

    readable.push('line1'); 
    readable.push('line2'); 
    readable.push('line3'); 
    readable.push('line4'); 

Ama anlamadığım şey, okuma yöntemini okunabilirlikte nasıl uygulamalıdır?

Örnek olarak tamamen farklı bir şekilde okunacak gibi görünüyor, bu yüzden bir şey kapalı gibi görünüyor.

Verileri okunabilir bir akışla el ile nasıl okuyabilirim?

cevap

0

Eh ben bu bunu yapmak için kurallı bir şekilde daha yakın olduğuna inanıyoruz, bir şey biraz yanlış olduğunu biliyordum: açıkça read çağırmalıdır Ben geliştirici inanmıyorum

const writable = new stream.Writable({ 

    write: function(chunk, encoding, cb){ 

     console.log('data =>', String(chunk)); 
     cb(); 
    }, 

    end: function(data){ 
     console.log('end was called with data=',data); 
    } 

}); 


var index = 0; 
var dataSource = ['1','2','3']; 

var readable = new stream.Readable({ 

    read: function(size){ 
     var data; 
     if(data = dataSource[index++]){ 
      this.push(data); 
     } 
     else{ 
      this.push(null); 
     } 
    } 

}); 

readable.setEncoding('utf8'); 

readable.on('data', (chunk) => { 
    console.log('got %d bytes of data', chunk.length, String(chunk)); 
}); 


readable.pipe(writable); 

; read, geliştirici tarafından uygulanmalıdır, ancak aranmaz. Umarım bu doğrudur. Tek sorum, yazılabilir akışta neden end çağrılmadı. Okumanın neden bir geri arama yapılmadığını merak ediyorum.