What is neo-async?
The neo-async package is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. It is similar to the async package but with some performance improvements.
What are neo-async's main functionalities?
Control Flow
Execute a series of functions in sequential order. Each function is passed a callback it must call on completion.
async.series([
function(callback) {
// do some stuff ...
callback(null, 'one');
},
function(callback) {
// do some more stuff ...
callback(null, 'two');
}
],
function(err, results) {
// results is now equal to ['one', 'two']
});
Collections
Apply a function to each item in a collection and collect the results.
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
Utilities
Call a function a certain number of times and collect the results.
async.times(5, function(n, next) {
createUser(n, function(err, user) {
next(err, user);
});
}, function(err, users) {
// we should now have 5 users
});
Other packages similar to neo-async
async
The original async package offers a wide array of functions for working with asynchronous code. Neo-async claims to offer similar functionality with improved performance.
bluebird
Bluebird is a full-featured promise library with a focus on innovative features and performance. It can be used as an alternative to neo-async for handling asynchronous operations using promises instead of callbacks.
q
Q is a tool for making and composing asynchronous promises in JavaScript. It's an older promise library that can serve similar purposes to neo-async but with a different style of handling async operations.
Neo-Async
Neo-Async is thought to be used as a drop-in replacement for Async, it almost fully covers its functionality and runs faster.
Benchmark is here!
Bluebird's benchmark is here!
Code Coverage
Installation
In a browser
<script src="async.min.js"></script>
In an AMD loader
require(['async'], function(async) {});
Promise and async/await
I recommend to use Aigle
.
It is optimized for Promise handling and has almost the same functionality as neo-async
.
Node.js
standard
$ npm install neo-async
var async = require('neo-async');
replacement
$ npm install neo-async
$ ln -s ./node_modules/neo-async ./node_modules/async
var async = require('async');
Bower
bower install neo-async
Feature
JSDoc
* not in Async
Collections
Control Flow
Utils
Mode
Benchmark
Benchmark: Async vs Neo-Async
How to check
$ node perf
Environment
- Darwin 17.3.0 x64
- Node.js v8.9.4
- async v2.6.0
- neo-async v2.5.0
- benchmark v2.1.4
Result
The value is the ratio (Neo-Async/Async) of the average speed.
Collections
function | benchmark |
---|
each/forEach | 2.43 |
eachSeries/forEachSeries | 1.75 |
eachLimit/forEachLimit | 1.68 |
eachOf | 3.29 |
eachOfSeries | 1.50 |
eachOfLimit | 1.59 |
map | 3.95 |
mapSeries | 1.81 |
mapLimit | 1.27 |
mapValues | 2.73 |
mapValuesSeries | 1.59 |
mapValuesLimit | 1.23 |
filter | 3.00 |
filterSeries | 1.74 |
filterLimit | 1.17 |
reject | 4.59 |
rejectSeries | 2.31 |
rejectLimit | 1.58 |
detect | 4.30 |
detectSeries | 1.86 |
detectLimit | 1.32 |
reduce | 1.82 |
transform | 2.46 |
sortBy | 4.08 |
some | 2.19 |
someSeries | 1.83 |
someLimit | 1.32 |
every | 2.09 |
everySeries | 1.84 |
everyLimit | 1.35 |
concat | 3.79 |
concatSeries | 4.45 |
Control Flow
funciton | benchmark |
---|
parallel | 2.93 |
series | 1.96 |
waterfall | 1.29 |
whilst | 1.00 |
doWhilst | 1.12 |
until | 1.12 |
doUntil | 1.12 |
during | 1.18 |
doDuring | 2.42 |
times | 4.25 |
auto | 1.97 |