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
			| 
								 
											3 years ago
										 
									 | 
							
								# 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
							 |