87 lines
2.7 KiB
Markdown
87 lines
2.7 KiB
Markdown
# multistream [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url]
|
|
|
|
[travis-image]: https://img.shields.io/travis/feross/multistream/master.svg
|
|
[travis-url]: https://travis-ci.org/feross/multistream
|
|
[npm-image]: https://img.shields.io/npm/v/multistream.svg
|
|
[npm-url]: https://npmjs.org/package/multistream
|
|
[downloads-image]: https://img.shields.io/npm/dm/multistream.svg
|
|
[downloads-url]: https://npmjs.org/package/multistream
|
|
[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg
|
|
[standard-url]: https://standardjs.com
|
|
|
|
#### A stream that emits multiple other streams one after another (streams3)
|
|
|
|
[](https://saucelabs.com/u/multistream)
|
|
|
|

|
|
|
|
Simple, robust streams3 version of [combined-stream](https://www.npmjs.org/package/combined-stream). Allows you to combine multiple streams into a single stream. When the first stream ends, the next one starts, and so on, until all streams are consumed.
|
|
|
|
This module is used by [WebTorrent](http://webtorrent.io), specifically [create-torrent](https://github.com/feross/create-torrent).
|
|
|
|
### install
|
|
|
|
```
|
|
npm install multistream
|
|
```
|
|
|
|
### usage
|
|
|
|
Use `multistream` like this:
|
|
|
|
```js
|
|
var MultiStream = require('multistream')
|
|
var fs = require('fs')
|
|
|
|
var streams = [
|
|
fs.createReadStream(__dirname + '/numbers/1.txt'),
|
|
fs.createReadStream(__dirname + '/numbers/2.txt'),
|
|
fs.createReadStream(__dirname + '/numbers/3.txt')
|
|
]
|
|
|
|
new MultiStream(streams).pipe(process.stdout) // => 123
|
|
```
|
|
|
|
You can also create an object-mode stream with `MultiStream.obj(streams)`.
|
|
|
|
To lazily create the streams, wrap them in a function:
|
|
|
|
```js
|
|
var streams = [
|
|
fs.createReadStream(__dirname + '/numbers/1.txt'),
|
|
function () { // will be executed when the stream is active
|
|
return fs.createReadStream(__dirname + '/numbers/2.txt')
|
|
},
|
|
function () { // same
|
|
return fs.createReadStream(__dirname + '/numbers/3.txt')
|
|
}
|
|
]
|
|
|
|
new MultiStream(streams).pipe(process.stdout) // => 123
|
|
```
|
|
|
|
Alternatively, streams may be created by an asynchronous "factory" function:
|
|
|
|
```js
|
|
var count = 0;
|
|
function factory (cb) {
|
|
if (count > 3) return cb(null, null)
|
|
count++
|
|
setTimeout(function () {
|
|
cb(null, fs.createReadStream(__dirname + '/numbers/' + count + '.txt'))
|
|
}, 100)
|
|
}
|
|
|
|
new MultiStream(factory).pipe(process.stdout) // => 123
|
|
```
|
|
|
|
### contributors
|
|
|
|
- [Feross Aboukhadijeh](http://feross.org)
|
|
- [Mathias Buus](https://github.com/mafintosh/)
|
|
- [Yuri Astrakhan](https://github.com/nyurik/)
|
|
|
|
### license
|
|
|
|
MIT. Copyright (c) [Feross Aboukhadijeh](http://feross.org).
|