I create a Buffer and a Readable stream, with the aim to make the Readable consume the Buffer.
The code is like so:
const { Readable } = require('stream');
// create a Buffer and allocate 200 positions to add the long text
const buf = Buffer.alloc(200, 'this is a loooong text..');
const readStream = (buf_data) => {
return new Readable({
read(size){
// I push the chunk data to the stream
this.push(buf_data);
// Here there MUST be a condition that will `push(null)`
// end emit the 'end' event
// ????
}
})
}
// Pass the Buffer to the readable stream
read = readStream(buf)
// the 'data' event is called to print the chunk data
read.on('data', (chunk) => {
console.log('chnk:', chunk.toString())
})
// the 'end' event, currently is not emitted, and the reading is not stopping.
read.on('and', (chunk) => {
console.log('--end--')
})
<filename>), the application keeps reading and printing the text.
There should be a condition that i can add into the read() method, to make end event trigger**I ended up just manually emitting the end event after creating the stream
let buffer = Buffer.from(attach.base64Data, 'base64');
const bufferStream = Readable.from(buffer)
bufferStream.emit("end");
It's also worth noting that I was stumped for a while because I was listening for finished instead of end
.on('end',()=>{}) // this gets called
.on('finish',()=>{}) // this never gets called.