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.
|
|
<h1 align="center">Neo-Async</h1>
<p align="center"> <img src="https://raw.githubusercontent.com/wiki/suguru03/neo-async/images/neo_async_v2.png" width="250px" /></p>
<p align="center"> <a href="https://www.npmjs.com/package/neo-async"><img alt="npm" src="https://img.shields.io/npm/v/neo-async.svg"></a> <a href="https://travis-ci.org/suguru03/neo-async"><img alt="Travis Status" src="https://img.shields.io/travis/suguru03/neo-async.svg"></a> <a href="https://codecov.io/gh/suguru03/neo-async"><img alt="Coverage Status" src="https://img.shields.io/codecov/c/github/suguru03/neo-async/master.svg"></a> <a href="https://www.npmjs.com/package/neo-async"><img alt="download" src="https://img.shields.io/npm/dm/neo-async.svg"></a> <a href="https://lgtm.com/projects/g/suguru03/neo-async/context:javascript"><img src="https://img.shields.io/lgtm/grade/javascript/g/suguru03/neo-async.svg?logo=lgtm&logoWidth=18" alt="Code Quality: Javascript" height="18"></a> <a href="https://lgtm.com/projects/g/suguru03/neo-async/alerts"><img src="https://img.shields.io/lgtm/alerts/g/suguru03/neo-async.svg?logo=lgtm&logoWidth=18" alt="Total Alerts" height="18"></a> <a href="https://app.fossa.io/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async?ref=badge_shield"><img src="https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async.svg?type=shield" alt="FOSSA" height="18"></a></p>
Neo-Async is thought to be used as a drop-in replacement for [Async](https://github.com/caolan/async), it almost fully covers its functionality and runs [faster](#benchmark).
Benchmark is [here](#benchmark)!
Bluebird's benchmark is [here](https://github.com/suguru03/bluebird/tree/aigle/benchmark)!
## Code Coverage

## Installation
### In a browser
```html<script src="async.min.js"></script>```
### In an AMD loader
```jsrequire(['async'], function(async) {});```
### Promise and async/await
I recommend to use [`Aigle`](https://github.com/suguru03/aigle).
It is optimized for Promise handling and has almost the same functionality as `neo-async`.
### Node.js
#### standard
```bash$ npm install neo-async``````jsvar async = require('neo-async');```
#### replacement
```bash$ npm install neo-async$ ln -s ./node_modules/neo-async ./node_modules/async``````jsvar async = require('async');```
### Bower
```bashbower install neo-async```
## Feature
[JSDoc](http://suguru03.github.io/neo-async/doc/async.html)
\* not in Async
### Collections
- [`each`](http://suguru03.github.io/neo-async/doc/async.each.html)- [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html)- [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html)- [`forEach`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html)- [`forEachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html)- [`forEachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html)- [`eachOf`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html)- [`eachOfSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html)- [`eachOfLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html)- [`forEachOf`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html)- [`forEachOfSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html)- [`eachOfLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`forEachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html)- [`map`](http://suguru03.github.io/neo-async/doc/async.map.html)- [`mapSeries`](http://suguru03.github.io/neo-async/doc/async.mapSeries.html)- [`mapLimit`](http://suguru03.github.io/neo-async/doc/async.mapLimit.html)- [`mapValues`](http://suguru03.github.io/neo-async/doc/async.mapValues.html)- [`mapValuesSeries`](http://suguru03.github.io/neo-async/doc/async.mapValuesSeries.html)- [`mapValuesLimit`](http://suguru03.github.io/neo-async/doc/async.mapValuesLimit.html)- [`filter`](http://suguru03.github.io/neo-async/doc/async.filter.html)- [`filterSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html)- [`filterLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html)- [`select`](http://suguru03.github.io/neo-async/doc/async.filter.html) -> [`filter`](http://suguru03.github.io/neo-async/doc/async.filter.html)- [`selectSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) -> [`filterSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html)- [`selectLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) -> [`filterLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html)- [`reject`](http://suguru03.github.io/neo-async/doc/async.reject.html)- [`rejectSeries`](http://suguru03.github.io/neo-async/doc/async.rejectSeries.html)- [`rejectLimit`](http://suguru03.github.io/neo-async/doc/async.rejectLimit.html)- [`detect`](http://suguru03.github.io/neo-async/doc/async.detect.html)- [`detectSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html)- [`detectLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html)- [`find`](http://suguru03.github.io/neo-async/doc/async.detect.html) -> [`detect`](http://suguru03.github.io/neo-async/doc/async.detect.html)- [`findSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) -> [`detectSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html)- [`findLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) -> [`detectLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html)- [`pick`](http://suguru03.github.io/neo-async/doc/async.pick.html) *- [`pickSeries`](http://suguru03.github.io/neo-async/doc/async.pickSeries.html) *- [`pickLimit`](http://suguru03.github.io/neo-async/doc/async.pickLimit.html) *- [`omit`](http://suguru03.github.io/neo-async/doc/async.omit.html) *- [`omitSeries`](http://suguru03.github.io/neo-async/doc/async.omitSeries.html) *- [`omitLimit`](http://suguru03.github.io/neo-async/doc/async.omitLimit.html) *- [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html)- [`inject`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -> [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html)- [`foldl`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -> [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html)- [`reduceRight`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html)- [`foldr`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) -> [`reduceRight`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html)- [`transform`](http://suguru03.github.io/neo-async/doc/async.transform.html)- [`transformSeries`](http://suguru03.github.io/neo-async/doc/async.transformSeries.html) *- [`transformLimit`](http://suguru03.github.io/neo-async/doc/async.transformLimit.html) *- [`sortBy`](http://suguru03.github.io/neo-async/doc/async.sortBy.html)- [`sortBySeries`](http://suguru03.github.io/neo-async/doc/async.sortBySeries.html) *- [`sortByLimit`](http://suguru03.github.io/neo-async/doc/async.sortByLimit.html) *- [`some`](http://suguru03.github.io/neo-async/doc/async.some.html)- [`someSeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html)- [`someLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html)- [`any`](http://suguru03.github.io/neo-async/doc/async.some.html) -> [`some`](http://suguru03.github.io/neo-async/doc/async.some.html)- [`anySeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) -> [`someSeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html)- [`anyLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) -> [`someLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html)- [`every`](http://suguru03.github.io/neo-async/doc/async.every.html)- [`everySeries`](http://suguru03.github.io/neo-async/doc/async.everySeries.html)- [`everyLimit`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html)- [`all`](http://suguru03.github.io/neo-async/doc/async.every.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.every.html)- [`allSeries`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.everySeries.html)- [`allLimit`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html)- [`concat`](http://suguru03.github.io/neo-async/doc/async.concat.html)- [`concatSeries`](http://suguru03.github.io/neo-async/doc/async.concatSeries.html)- [`concatLimit`](http://suguru03.github.io/neo-async/doc/async.concatLimit.html) *
### Control Flow
- [`parallel`](http://suguru03.github.io/neo-async/doc/async.parallel.html)- [`series`](http://suguru03.github.io/neo-async/doc/async.series.html)- [`parallelLimit`](http://suguru03.github.io/neo-async/doc/async.series.html)- [`tryEach`](http://suguru03.github.io/neo-async/doc/async.tryEach.html)- [`waterfall`](http://suguru03.github.io/neo-async/doc/async.waterfall.html)- [`angelFall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) *- [`angelfall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) -> [`angelFall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) *- [`whilst`](#whilst)- [`doWhilst`](#doWhilst)- [`until`](#until)- [`doUntil`](#doUntil)- [`during`](#during)- [`doDuring`](#doDuring)- [`forever`](#forever)- [`compose`](#compose)- [`seq`](#seq)- [`applyEach`](#applyEach)- [`applyEachSeries`](#applyEachSeries)- [`queue`](#queue)- [`priorityQueue`](#priorityQueue)- [`cargo`](#cargo)- [`auto`](#auto)- [`autoInject`](#autoInject)- [`retry`](#retry)- [`retryable`](#retryable)- [`iterator`](#iterator)- [`times`](http://suguru03.github.io/neo-async/doc/async.times.html)- [`timesSeries`](http://suguru03.github.io/neo-async/doc/async.timesSeries.html)- [`timesLimit`](http://suguru03.github.io/neo-async/doc/async.timesLimit.html)- [`race`](#race)
### Utils
- [`apply`](#apply)- [`setImmediate`](#setImmediate)- [`nextTick`](#nextTick)- [`memoize`](#memoize)- [`unmemoize`](#unmemoize)- [`ensureAsync`](#ensureAsync)- [`constant`](#constant)- [`asyncify`](#asyncify)- [`wrapSync`](#asyncify) -> [`asyncify`](#asyncify)- [`log`](#log)- [`dir`](#dir)- [`timeout`](http://suguru03.github.io/neo-async/doc/async.timeout.html)- [`reflect`](#reflect)- [`reflectAll`](#reflectAll)- [`createLogger`](#createLogger)
## Mode
- [`safe`](#safe) *- [`fast`](#fast) *
## Benchmark
[Benchmark: Async vs Neo-Async](http://suguru03.hatenablog.com/entry/2016/06/10/135559)
### How to check
```bash$ 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
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async?ref=badge_large)
|