lihai 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
..
LICENSE 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
README.md 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
all.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
allLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
allSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
angelFall.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
any.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
anyLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
anySeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
apply.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
applyEach.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
applyEachSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
async.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
async.min.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
asyncify.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
auto.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
autoInject.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
cargo.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
compose.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
concat.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
concatLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
concatSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
constant.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
createLogger.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
detect.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
detectLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
detectSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
dir.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
doDuring.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
doUntil.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
doWhilst.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
during.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
each.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
eachLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
eachOf.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
eachOfLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
eachOfSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
eachSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
ensureAsync.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
every.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
everyLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
everySeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
fast.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
filter.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
filterLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
filterSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
find.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
findLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
findSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
foldl.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
foldr.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forEach.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forEachLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forEachOf.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forEachOfLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forEachOfSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forEachSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
forever.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
groupBy.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
groupByLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
groupBySeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
inject.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
iterator.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
log.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
map.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
mapLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
mapSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
mapValues.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
mapValuesLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
mapValuesSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
memoize.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
nextTick.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
omit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
omitLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
omitSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
package.json 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
parallel.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
parallelLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
pick.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
pickLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
pickSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
priorityQueue.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
queue.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
race.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
reduce.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
reduceRight.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
reflect.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
reflectAll.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
reject.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
rejectLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
rejectSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
retry.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
retryable.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
safe.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
select.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
selectLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
selectSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
seq.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
series.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
setImmediate.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
some.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
someLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
someSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
sortBy.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
sortByLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
sortBySeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
timeout.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
times.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
timesLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
timesSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
transform.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
transformLimit.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
transformSeries.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
tryEach.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
unmemoize.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
until.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
waterfall.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
whilst.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos
wrapSync.js 8d6c751f49 feat: push %!s(int64=2) %!d(string=hai) anos

README.md

Neo-Async

npm Travis Status Coverage Status download Total Alerts

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

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