Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: about 1 month ago
JSON representation

⛵️ Beautiful Array utilities for ESnext async/await ~

Awesome Lists containing this project

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:**

Asyncro Example

* * *

## What's in the Box

Asyncro Example 2

* * *

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