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.
		
		
		
		
		
			
		
			
				
					
					
						
							129 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							129 lines
						
					
					
						
							3.3 KiB
						
					
					
				| # fastseries
 | |
| 
 | |
| [![npm version][npm-badge]][npm-url]
 | |
| [![Build Status][travis-badge]][travis-url]
 | |
| [![Coverage Status][coveralls-badge]][coveralls-url]
 | |
| [![Dependency Status][david-badge]][david-url]
 | |
| 
 | |
| Zero-overhead series function call for node.js.
 | |
| Also supports `each` and `map`!
 | |
| 
 | |
| Benchmark for doing 3 calls `setImmediate` 1 million times:
 | |
| 
 | |
| * non-reusable `setImmediate`: 3887ms
 | |
| * `async.series`: 5981ms
 | |
| * `async.eachSeries`: 5087ms
 | |
| * `async.mapSeries`: 5540ms
 | |
| * `neoAsync.series`: 4338ms
 | |
| * `neoAsync.eachSeries`: 4195ms
 | |
| * `neoAsync.mapSeries`: 4237ms
 | |
| * `tiny-each-async`: 4575ms
 | |
| * `fastseries` with results: 4096ms
 | |
| * `fastseries` without results: 4063ms
 | |
| * `fastseries` map: 4032ms
 | |
| * `fastseries` each: 4168ms
 | |
| 
 | |
| These benchmarks where taken via `bench.js` on node 4.2.2, on a MacBook
 | |
| Pro Retina 2014.
 | |
| 
 | |
| If you need zero-overhead parallel function call, check out
 | |
| [fastparallel](http://npm.im/fastparallel).
 | |
| 
 | |
| [](https://github.com/feross/standard)
 | |
| 
 | |
| ## Example for series call
 | |
| 
 | |
| ```js
 | |
| var series = require('fastseries')({
 | |
|   // this is a function that will be called
 | |
|   // when a series completes
 | |
|   released: completed,
 | |
| 
 | |
|   // if you want the results, then here you are
 | |
|   results: true
 | |
| })
 | |
| 
 | |
| series(
 | |
|   {}, // what will be this in the functions
 | |
|   [something, something, something], // functions to call
 | |
|   42, // the first argument of the functions
 | |
|   done // the function to be called when the series ends
 | |
| )
 | |
| 
 | |
| function late (arg, cb) {
 | |
|   console.log('finishing', arg)
 | |
|   cb(null, 'myresult-' + arg)
 | |
| }
 | |
| 
 | |
| function something (arg, cb) {
 | |
|   setTimeout(late, 1000, arg, cb)
 | |
| }
 | |
| 
 | |
| function done (err, results) {
 | |
|   console.log('series completed, results:', results)
 | |
| }
 | |
| 
 | |
| function completed () {
 | |
|   console.log('series completed!')
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Example for each and map calls
 | |
| 
 | |
| ```js
 | |
| var series = require('fastseries')({
 | |
|   // this is a function that will be called
 | |
|   // when a series completes
 | |
|   released: completed,
 | |
| 
 | |
|   // if you want the results, then here you are
 | |
|   // passing false disables map
 | |
|   results: true
 | |
| })
 | |
| 
 | |
| series(
 | |
|   {}, // what will be this in the functions
 | |
|   something, // functions to call
 | |
|   [1, 2, 3], // the first argument of the functions
 | |
|   done // the function to be called when the series ends
 | |
| )
 | |
| 
 | |
| function late (arg, cb) {
 | |
|   console.log('finishing', arg)
 | |
|   cb(null, 'myresult-' + arg)
 | |
| }
 | |
| 
 | |
| function something (arg, cb) {
 | |
|   setTimeout(late, 1000, arg, cb)
 | |
| }
 | |
| 
 | |
| function done (err, results) {
 | |
|   console.log('series completed, results:', results)
 | |
| }
 | |
| 
 | |
| function completed () {
 | |
|   console.log('series completed!')
 | |
| }
 | |
| 
 | |
| ```
 | |
| 
 | |
| ## Caveats
 | |
| 
 | |
| The `done` function will be called only once, even if more than one error happen.
 | |
| 
 | |
| This library works by caching the latest used function, so that running a new series
 | |
| does not cause **any memory allocations**.
 | |
| 
 | |
| ## License
 | |
| 
 | |
| ISC
 | |
| 
 | |
| [npm-badge]: https://badge.fury.io/js/fastseries.svg
 | |
| [npm-url]: https://badge.fury.io/js/fastseries
 | |
| [travis-badge]: https://api.travis-ci.org/mcollina/fastseries.svg
 | |
| [travis-url]: https://travis-ci.org/mcollina/fastseries
 | |
| [coveralls-badge]:https://coveralls.io/repos/mcollina/fastseries/badge.svg?branch=master&service=github
 | |
| [coveralls-url]: https://coveralls.io/github/mcollina/fastseries?branch=master
 | |
| [david-badge]: https://david-dm.org/mcollina/fastseries.svg
 | |
| [david-url]: https://david-dm.org/mcollina/fastseries
 |