71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # from2 [](https://flattr.com/submit/auto?user_id=hughskennedy&url=http://github.com/hughsk/from2&title=from2&description=hughsk/from2%20on%20GitHub&language=en_GB&tags=flattr,github,javascript&category=software)[](http://github.com/hughsk/stability-badges) #
 | |
| 
 | |
| `from2` is a high-level module for creating readable streams that properly handle backpressure.
 | |
| 
 | |
| Convience wrapper for
 | |
| [readable-stream](http://github.com/isaacs/readable-stream)'s `ReadableStream`
 | |
| base class, with an API lifted from
 | |
| [from](http://github.com/dominictarr/from) and
 | |
| [through2](http://github.com/rvagg/through2).
 | |
| 
 | |
| ## Usage ##
 | |
| 
 | |
| [](https://nodei.co/npm/from2)
 | |
| 
 | |
| ### `stream = from2([opts], read)` ###
 | |
| 
 | |
| Where `opts` are the options to pass on to the `ReadableStream` constructor,
 | |
| and `read(size, next)` is called when data is requested from the stream.
 | |
| 
 | |
| * `size` is the recommended amount of data (in bytes) to retrieve.
 | |
| * `next(err)` should be called when you're ready to emit more data.
 | |
| 
 | |
| For example, here's a readable stream that emits the contents of a given
 | |
| string:
 | |
| 
 | |
| ``` javascript
 | |
| var from = require('from2')
 | |
| 
 | |
| function fromString(string) {
 | |
|   return from(function(size, next) {
 | |
|     // if there's no more content
 | |
|     // left in the string, close the stream.
 | |
|     if (string.length <= 0) return next(null, null)
 | |
| 
 | |
|     // Pull in a new chunk of text,
 | |
|     // removing it from the string.
 | |
|     var chunk = string.slice(0, size)
 | |
|     string = string.slice(size)
 | |
| 
 | |
|     // Emit "chunk" from the stream.
 | |
|     next(null, chunk)
 | |
|   })
 | |
| }
 | |
| 
 | |
| // pipe "hello world" out
 | |
| // to stdout.
 | |
| fromString('hello world').pipe(process.stdout)
 | |
| ```
 | |
| 
 | |
| ### `stream = from2.obj([opts], read)` ###
 | |
| 
 | |
| Shorthand for `from2({ objectMode: true }, read)`.
 | |
| 
 | |
| ### `createStream = from2.ctor([opts], read)` ###
 | |
| 
 | |
| If you're creating similar streams in quick succession you can improve
 | |
| performance by generating a stream **constructor** that you can reuse instead
 | |
| of creating one-off streams on each call.
 | |
| 
 | |
| Takes the same options as `from2`, instead returning a constructor which you
 | |
| can use to create new streams.
 | |
| 
 | |
| ### See Also
 | |
| 
 | |
| - [from2-array](https://github.com/binocarlos/from2-array) - Create a from2 stream based on an array of source values.
 | |
| - [from2-string](https://github.com/yoshuawuyts/from2-string) - Create a stream from a string. Sugary wrapper around from2.
 | |
| 
 | |
| ## License ##
 | |
| 
 | |
| MIT. See [LICENSE.md](http://github.com/hughsk/from2/blob/master/LICENSE.md) for details.
 |