Readable Streams: Simplified Construction and Iterables
Learn how to implement simple custom streams using the simplified construction approach.
We'll cover the following...
Simplified construction
For simple custom streams, we can avoid creating a custom class by using the Readable
stream’s simplified construction approach. With this approach, we only need to invoke new
Readable(options)
and pass a method named read()
in the set of options. The read()
method here has exactly the same semantic as the _read()
method that we saw in the class extension approach. Let's rewrite our RandomStream
using the simplified constructor approach.
Press + to interact
import { Readable } from 'stream'import Chance from 'chance'const chance = new Chance()let emittedBytes = 0const randomStream = new Readable({read (size) {const chunk = chance.string({ length: size })this.push(chunk, 'utf8')emittedBytes += chunk.lengthif (chance.bool({ likelihood: 5 })) {this.push(null)}}})randomStream.on('data', (chunk) => {console.log(`Chunk received (${chunk.length} bytes): ${chunk.toString()}`)}).on('end', () => {console.log(`Produced ${emittedBytes} bytes of random data`)})
This ...