README.md
12 KB
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 <code>Aigle</code>.
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
* not in Async
Collections
- <code>each</code>
- <code>eachSeries</code>
- <code>eachLimit</code>
- <code>forEach</code> -> <code>each</code>
- <code>forEachSeries</code> -> <code>eachSeries</code>
- <code>forEachLimit</code> -> <code>eachLimit</code>
- <code>eachOf</code> -> <code>each</code>
- <code>eachOfSeries</code> -> <code>eachSeries</code>
- <code>eachOfLimit</code> -> <code>eachLimit</code>
- <code>forEachOf</code> -> <code>each</code>
- <code>forEachOfSeries</code> -> <code>eachSeries</code>
- <code>eachOfLimit</code> -> <code>forEachLimit</code>
- <code>map</code>
- <code>mapSeries</code>
- <code>mapLimit</code>
- <code>mapValues</code>
- <code>mapValuesSeries</code>
- <code>mapValuesLimit</code>
- <code>filter</code>
- <code>filterSeries</code>
- <code>filterLimit</code>
- <code>select</code> -> <code>filter</code>
- <code>selectSeries</code> -> <code>filterSeries</code>
- <code>selectLimit</code> -> <code>filterLimit</code>
- <code>reject</code>
- <code>rejectSeries</code>
- <code>rejectLimit</code>
- <code>detect</code>
- <code>detectSeries</code>
- <code>detectLimit</code>
- <code>find</code> -> <code>detect</code>
- <code>findSeries</code> -> <code>detectSeries</code>
- <code>findLimit</code> -> <code>detectLimit</code>
- <code>pick</code> *
- <code>pickSeries</code> *
- <code>pickLimit</code> *
- <code>omit</code> *
- <code>omitSeries</code> *
- <code>omitLimit</code> *
- <code>reduce</code>
- <code>inject</code> -> <code>reduce</code>
- <code>foldl</code> -> <code>reduce</code>
- <code>reduceRight</code>
- <code>foldr</code> -> <code>reduceRight</code>
- <code>transform</code>
- <code>transformSeries</code> *
- <code>transformLimit</code> *
- <code>sortBy</code>
- <code>sortBySeries</code> *
- <code>sortByLimit</code> *
- <code>some</code>
- <code>someSeries</code>
- <code>someLimit</code>
- <code>any</code> -> <code>some</code>
- <code>anySeries</code> -> <code>someSeries</code>
- <code>anyLimit</code> -> <code>someLimit</code>
- <code>every</code>
- <code>everySeries</code>
- <code>everyLimit</code>
- <code>all</code> -> <code>every</code>
- <code>allSeries</code> -> <code>every</code>
- <code>allLimit</code> -> <code>every</code>
- <code>concat</code>
- <code>concatSeries</code>
- <code>concatLimit</code> *
Control Flow
- <code>parallel</code>
- <code>series</code>
- <code>parallelLimit</code>
- <code>tryEach</code>
- <code>waterfall</code>
- <code>angelFall</code> *
- <code>angelfall</code> -> <code>angelFall</code> *
- <code>whilst</code>
- <code>doWhilst</code>
- <code>until</code>
- <code>doUntil</code>
- <code>during</code>
- <code>doDuring</code>
- <code>forever</code>
- <code>compose</code>
- <code>seq</code>
- <code>applyEach</code>
- <code>applyEachSeries</code>
- <code>queue</code>
- <code>priorityQueue</code>
- <code>cargo</code>
- <code>auto</code>
- <code>autoInject</code>
- <code>retry</code>
- <code>retryable</code>
- <code>iterator</code>
- <code>times</code>
- <code>timesSeries</code>
- <code>timesLimit</code>
- <code>race</code>
Utils
- <code>apply</code>
- <code>setImmediate</code>
- <code>nextTick</code>
- <code>memoize</code>
- <code>unmemoize</code>
- <code>ensureAsync</code>
- <code>constant</code>
- <code>asyncify</code>
- <code>wrapSync</code> -> <code>asyncify</code>
- <code>log</code>
- <code>dir</code>
- <code>timeout</code>
- <code>reflect</code>
- <code>reflectAll</code>
- <code>createLogger</code>
Mode
Benchmark
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 |