Piszę moduł, który jest zapisywalnym strumieniem. Chcę wdrożyć interfejs rur dla moich użytkowników.Jaki jest prawidłowy sposób wstrzymania odczytu strumieniowego z pliku do zapisu w nodejs?
Jeśli wystąpi jakikolwiek błąd, muszę wstrzymać czytelny strumień i wyemitować zdarzenie błędu. Następnie użytkownik zdecyduje - jeśli jest w porządku z błędem, powinien być w stanie wznowić przetwarzanie danych.
var writeable = new BackPressureStream();
writeable.on('error', function(error){
console.log(error);
writeable.resume();
});
var readable = require('fs').createReadStream('somefile.txt');
readable.pipe.(writeable);
widzę, że węzeł dostarcza nam readable.pause()
metody, które można wykorzystać, aby wstrzymać czytelny strumień. Ale nie mogę sobie wyobrazić, jak mogę to nazwać z mojego modułu zapisu do zapisu:
var Writable = require('stream').Writable;
function BackPressureStream(options) {
Writable.call(this, options);
}
require('util').inherits(BackPressureStream, Writable);
BackPressureStream.prototype._write = function(chunk, encoding, done) {
done();
};
BackPressureStream.prototype.resume = function() {
this.emit('drain');
}
W jaki sposób można wprowadzić ciśnienie wsteczne w zapisywalnym strumieniu?
P.S. Możliwe jest użycie zdarzeń pipe/unpipe
, które zapewniają czytelny strumień jako parametr. Ale mówi się również, że dla strumieni potokowych jedyną szansą na zatrzymanie jest wypakowanie czytelnego strumienia z zapisu.
Czy mam to prawo? Muszę odpakować mój zapis do strumienia, dopóki użytkownik nie wznowi połączenia? A po wznowieniu wywołań użytkownika, powinienem odejść czytelny strumień z powrotem?
zainteresowany rozpoczęciem bounty na ten jeden? –
hej, znalazłeś odpowiedź na swoje pytanie? –