What is end-of-stream?
The end-of-stream npm package is designed to help developers handle the end or error conditions of a stream more easily. It provides a simple way to execute a callback when a stream has finished or failed, making it easier to manage streams in Node.js applications.
What are end-of-stream's main functionalities?
Callback on stream end
This feature allows you to execute a callback function when the stream ends or encounters an error. The code sample demonstrates how to use end-of-stream with a file read stream.
const eos = require('end-of-stream');
const fs = require('fs');
const readStream = fs.createReadStream('file.txt');
eos(readStream, function(err) {
if (err) return console.log('Stream had an error or closed early');
console.log('Stream has ended');
});
Promise support
This feature demonstrates how to use end-of-stream with promises, providing a more modern approach to handling stream completion. It uses the `promisify` utility from Node.js to convert the eos callback pattern into a promise.
const eos = require('end-of-stream');
const fs = require('fs');
const { promisify } = require('util');
const eosPromise = promisify(eos);
const readStream = fs.createReadStream('file.txt');
eosPromise(readStream).then(() => console.log('Stream has ended')).catch(err => console.log('Stream had an error or closed early'));
Other packages similar to end-of-stream
pump
Pump is a package that not only listens for the end of streams but also helps to pipe streams together and handles cleanup in case of a stream ending prematurely. It's more comprehensive than end-of-stream as it also manages the flow between streams.
end-of-stream
A node module that calls a callback when a readable/writable/duplex stream has completed or failed.
npm install end-of-stream
Usage
Simply pass a stream and a callback to the eos
.
Both legacy streams and streams2 are supported.
var eos = require('end-of-stream');
eos(readableStream, function(err) {
if (err) return console.log('stream had an error or closed early');
console.log('stream has ended');
});
eos(writableStream, function(err) {
if (err) return console.log('stream had an error or closed early');
console.log('stream has finished');
});
eos(duplexStream, function(err) {
if (err) return console.log('stream had an error or closed early');
console.log('stream has ended and finished');
});
eos(duplexStream, {readable:false}, function(err) {
if (err) return console.log('stream had an error or closed early');
console.log('stream has ended but might still be writable');
});
eos(duplexStream, {writable:false}, function(err) {
if (err) return console.log('stream had an error or closed early');
console.log('stream has ended but might still be readable');
});
License
MIT