1.4 KiB
1.4 KiB
title | category |
---|---|
Stream | Node.js |
const Readable = require('stream').Readable
const Writable = require('stream').Writable
const Transform = require('stream').Transform
Piping
clock() // Readable stream
.pipe(xformer()) // Transform stream
.pipe(renderer()) // Writable stream
Readable streams
Readable streams are generators of data. Write data using stream.push()
.
function clock () {
const stream = new Readable({
objectMode: true,
read: () => {} // implement this if you need on-demand reading
})
setInterval(() => {
stream.push({ time: new Date() })
if (error) return stream.emit('error', error)
if (eof) return stream.push(null)
}, 1000)
return stream
}
Transform streams
Pass the updated chunk to done(null, chunk)
.
function xformer () {
let count = 0
return new Transform({
objectMode: true,
transform: (data, _, done) => {
done(null, { time: data.time, index: count++ })
}
})
}
Writable streams
function renderer () {
return new Writable({
objectMode: true,
write: (data, _, done) => {
console.log('<-', data)
done()
}
})
}
Reading
const st = source()
st.on('data', (data) => { console.log('<-', data) })
st.on('close', () => { console.log('** bye') })