You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
var eos = require('end-of-stream') var shift = require('stream-shift')
module.exports = each
function each (stream, fn, cb) { var want = true var error = null var ended = false var running = false var calling = false
stream.on('readable', onreadable) onreadable()
if (cb) eos(stream, {readable: true, writable: false}, done) return stream
function done (err) { if (!error) error = err ended = true if (!running) cb(error) }
function onreadable () { if (want) read() }
function afterRead (err) { running = false
if (err) { error = err if (ended) return cb(error) stream.destroy(err) return } if (ended) return cb(error) if (!calling) read() }
function read () { while (!running && !ended) { want = false
var data = shift(stream) if (ended) return if (data === null) { want = true return }
running = true calling = true fn(data, afterRead) calling = false } } }
|