dönüştürmek
Dönüşüm akışları hem okunabilir hem de yazılabilir ve bu nedenle gerçekten iyi 'orta' akışlardır. Bu nedenle, bazen through
akış olarak adlandırılırlar . Bu şekilde bir dubleks akışına benzerler, ancak verileri göndermek yerine verileri işlemek için güzel bir arayüz sağlarlar. Dönüştürme akışının amacı, akıştan geçirilirken verileri işlemektir. Örneğin, zaman uyumsuz çağrılar yapmak veya birkaç alan türetmek, bazı şeyleri yeniden eşleştirmek vb. İsteyebilirsiniz.
Dönüşüm akışı oluşturma hakkında bilgi için buraya ve buraya bakın . Tüm yapman gereken :
- akış modülünü dahil et
- Transform sınıfını örnekleme (veya devralma)
_transform
alan bir yöntem uygulamak (chunk, encoding, callback)
.
Parça verilerinizdir. Çalışıyorsanız kodlama konusunda endişelenmenize gerek kalmaz objectMode = true
. Öbek işleme işiniz bittiğinde geri arama çağrılır. Bu yığın daha sonra bir sonraki akışa itilir.
Eğer gerçekten gerçekten kolay bir şekilde akış yapmanıza olanak sağlayacak güzel bir yardımcı modül istiyorsanız, size through2 öneriyoruz .
Hata işleme için okumaya devam edin.
boru
Bir boru zincirinde, hataların ele alınması gerçekten önemsizdir. Bu iş parçacığına göre .pipe () hataları iletmek için oluşturulmamıştır. Yani şöyle bir şey ...
var a = createStream();
a.pipe(b).pipe(c).on('error', function(e){handleError(e)});
... yalnızca akıştaki hataları dinlerdi c
. Bir hata olayı yayılırsa a
, bu aktarılmaz ve aslında atılır. Bunu doğru yapmak için:
var a = createStream();
a.on('error', function(e){handleError(e)})
.pipe(b)
.on('error', function(e){handleError(e)})
.pipe(c)
.on('error', function(e){handleError(e)});
Şimdi, ikinci yol daha ayrıntılı olsa da, en azından hatalarınızın nerede gerçekleştiğinin bağlamını koruyabilirsiniz. Bu genellikle iyi bir şeydir.
Eğer sadece hedefteki hataları yakalamak istediğiniz bir vakanız varsa ve bunun gerçekleştiği yeri umursamadığınızda olay akışı ise yararlı bulduğum bir kütüphane .
son
Bir hata olayı tetiklendiğinde, son olay tetiklenmez (açıkça). Bir hata olayının yayınlanması akışı sona erdirir.
etki
Deneyimlerime göre, alanlar çoğu zaman gerçekten iyi çalışır. İşlenmemiş bir hata olayınız varsa (örn. Dinleyici olmayan bir akışta hata yayarsa), sunucu çökebilir. Şimdi, yukarıdaki makalede belirtildiği gibi, akışı tüm hataları düzgün bir şekilde yakalaması gereken bir alana sarabilirsiniz.
var d = domain.create();
d.on('error', handleAllErrors);
d.run(function() {
fs.createReadStream(tarball)
.pipe(gzip.Gunzip())
.pipe(tar.Extract({ path: targetPath }))
.on('close', cb);
});
Alanların güzelliği, yığın izlerini koruyacaklarıdır. Olay akışı bununla da iyi bir iş çıkarsa da.
Daha fazla okuma için akış el kitabına bakın . Oldukça derin, ama süper kullanışlı ve birçok yararlı modüle harika bağlantılar veriyor.
Promise
çerçeveleri daha basit hale getirir