README

# 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

- `each`
- `eachSeries`
- `eachLimit`
- `forEach` -> `each`
- `forEachSeries` -> `eachSeries`
- `forEachLimit` -> `eachLimit`
- `eachOf` -> `each`
- `eachOfSeries` -> `eachSeries`
- `eachOfLimit` -> `eachLimit`
- `forEachOf` -> `each`
- `forEachOfSeries` -> `eachSeries`
- `eachOfLimit` -> `forEachLimit`
- `map`
- `mapSeries`
- `mapLimit`
- `mapValues`
- `mapValuesSeries`
- `mapValuesLimit`
- `filter`
- `filterSeries`
- `filterLimit`
- `select` -> `filter`
- `selectSeries` -> `filterSeries`
- `selectLimit` -> `filterLimit`
- `reject`
- `rejectSeries`
- `rejectLimit`
- `detect`
- `detectSeries`
- `detectLimit`
- `find` -> `detect`
- `findSeries` -> `detectSeries`
- `findLimit` -> `detectLimit`
- `pick` *
- `pickSeries` *
- `pickLimit` *
- `omit` *
- `omitSeries` *
- `omitLimit` *
- `reduce`
- `inject` -> `reduce`
- `foldl` -> `reduce`
- `reduceRight`
- `foldr` -> `reduceRight`
- `transform`
- `transformSeries` *
- `transformLimit` *
- `sortBy`
- `sortBySeries` *
- `sortByLimit` *
- `some`
- `someSeries`
- `someLimit`
- `any` -> `some`
- `anySeries` -> `someSeries`
- `anyLimit` -> `someLimit`
- `every`
- `everySeries`
- `everyLimit`
- `all` -> `every`
- `allSeries` -> `every`
- `allLimit` -> `every`
- `concat`
- `concatSeries`
- `concatLimit` *

### Control Flow

- `parallel`
- `series`
- `parallelLimit`
- `tryEach`
- `waterfall`
- `angelFall` *
- `angelfall` -> `angelFall` *
- `whilst`
- `doWhilst`
- `until`
- `doUntil`
- `during`
- `doDuring`
- `forever`
- `compose`
- `seq`
- `applyEach`
- `applyEachSeries`
- `queue`
- `priorityQueue`
- `cargo`
- `auto`
- `autoInject`
- `retry`
- `retryable`
- `iterator`
- `times`
- `timesSeries`
- `timesLimit`
- `race`

### Utils

- `apply`
- `setImmediate`
- `nextTick`
- `memoize`
- `unmemoize`
- `ensureAsync`
- `constant`
- `asyncify`
- `wrapSync` -> `asyncify`
- `log`
- `dir`
- `timeout`
- `reflect`
- `reflectAll`
- `createLogger`

## Mode

- `safe` *
- `fast` *

## 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

## License