Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/developit/asyncro
⛵️ Beautiful Array utilities for ESnext async/await ~
https://github.com/developit/asyncro
accumulator async-functions asynchronous filter iteration parallel promise promises
Last synced: 6 days ago
JSON representation
⛵️ Beautiful Array utilities for ESnext async/await ~
- Host: GitHub
- URL: https://github.com/developit/asyncro
- Owner: developit
- Created: 2016-10-21T04:46:08.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-03-28T01:11:34.000Z (over 6 years ago)
- Last Synced: 2024-11-30T18:03:42.066Z (13 days ago)
- Topics: accumulator, async-functions, asynchronous, filter, iteration, parallel, promise, promises
- Language: JavaScript
- Homepage: https://developit.github.io/asyncro
- Size: 1.14 MB
- Stars: 487
- Watchers: 5
- Forks: 24
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-list - asyncro
README
# `asyncro` [![NPM](https://img.shields.io/npm/v/asyncro.svg?style=flat)](https://www.npmjs.org/package/asyncro) [![travis-ci](https://travis-ci.org/developit/asyncro.svg?branch=master)](https://travis-ci.org/developit/asyncro)
The same `map()`, `reduce()` & `filter()` you know and love, but with async iterator functions!
Do `fetch()` networking in loops, resolve Promises, anything async goes. Performance-friendly _by default_.
**Here's what it looks like:**
* * *
## What's in the Box
* * *
## Installation
```sh
npm install --save asyncro
```## Import and Usage Example
```js
import { map } from 'asyncro';async function example() {
return await map(
['foo', 'bar', 'baz'],
async name => fetch('./'+name)
)
}
```## API
### reduce
Invoke an async reducer function on each item in the given Array,
where the reducer transforms an accumulator value based on each item iterated over.
**Note:** because `reduce()` is order-sensitive, iteration is sequential.> This is an asynchronous version of `Array.prototype.reduce()`
**Parameters**
- `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** The Array to reduce
- `reducer` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** Async function, gets passed `(accumulator, value, index, array)` and returns a new value for `accumulator`
- `accumulator` **\[any]** Optional initial accumulator value**Examples**
```javascript
await reduce(
['/foo', '/bar', '/baz'],
async (accumulator, value) => {
accumulator[v] = await fetch(value);
return accumulator;
},
{}
);
```Returns **any** final `accumulator` value
### map
Invoke an async transform function on each item in the given Array **in parallel**,
returning the resulting Array of mapped/transformed items.> This is an asynchronous, parallelized version of `Array.prototype.map()`.
**Parameters**
- `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** The Array to map over
- `mapper` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** Async function, gets passed `(value, index, array)`, returns the new value.**Examples**
```javascript
await map(
['foo', 'baz'],
async v => await fetch(v)
)
```Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** resulting mapped/transformed values.
### filter
Invoke an async filter function on each item in the given Array **in parallel**,
returning an Array of values for which the filter function returned a truthy value.> This is an asynchronous, parallelized version of `Array.prototype.filter()`.
**Parameters**
- `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** The Array to filter
- `filterer` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** Async function. Gets passed `(value, index, array)`, returns true to keep the value in the resulting filtered Array.**Examples**
```javascript
await filter(
['foo', 'baz'],
async v => (await fetch(v)).ok
)
```Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** resulting filtered values
### find
Invoke an async function on each item in the given Array **in parallel**,
returning the first element predicate returns truthy for.> This is an asynchronous, parallelized version of `Array.prototype.find()`.
**Parameters**
- `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** The Array to find
- `predicate` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** Async function. Gets passed `(value, index, array)`, returns true to be the find result.**Examples**
```javascript
await find(
['foo', 'baz', 'root'],
async v => (await fetch(v)).name === 'baz'
)
```Returns **any** resulting find value
### every
Checks if predicate returns truthy for **all** elements of collection **in parallel**.
> This is an asynchronous, parallelized version of `Array.prototype.every()`.
**Parameters**
- `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** The Array to iterate over.
- `predicate` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** Async function. Gets passed `(value, index, array)`, The function invoked per iteration.**Examples**
```javascript
await every(
[2, 3],
async v => (await fetch(v)).ok
)
```Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Returns true if **all** element passes the predicate check, else false.
### some
Checks if predicate returns truthy for **any** element of collection **in parallel**.
> This is an asynchronous, parallelized version of `Array.prototype.some()`.
**Parameters**
- `array` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** The Array to iterate over.
- `filterer` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** Async function. Gets passed `(value, index, array)`, The function invoked per iteration.**Examples**
```javascript
await some(
['foo', 'baz'],
async v => (await fetch(v)).ok
)
```Returns **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Returns true if **any** element passes the predicate check, else false.
### parallel
Invoke all async functions in an Array or Object **in parallel**, returning the result.
**Parameters**
- `list` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)> | [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)<[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)>)** Array/Object with values that are async functions to invoke.
**Examples**
```javascript
await parallel([
async () => await fetch('foo'),
async () => await fetch('baz')
])
```Returns **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \| [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object))** same structure as `list` input, but with values now resolved.
### series
Invoke all async functions in an Array or Object **sequentially**, returning the result.
**Parameters**
- `list` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)> | [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)<[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)>)** Array/Object with values that are async functions to invoke.
**Examples**
```javascript
await series([
async () => await fetch('foo'),
async () => await fetch('baz')
])
```Returns **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \| [Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object))** same structure as `list` input, but with values now resolved.
## License
[MIT](https://oss.ninja/mit/developit)