https://github.com/arlac77/aggregate-async-iterator
Aggregates several async iterators into one
https://github.com/arlac77/aggregate-async-iterator
Last synced: about 1 year ago
JSON representation
Aggregates several async iterators into one
- Host: GitHub
- URL: https://github.com/arlac77/aggregate-async-iterator
- Owner: arlac77
- License: 0bsd
- Created: 2020-05-30T13:26:04.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2025-04-06T00:06:57.000Z (about 1 year ago)
- Last Synced: 2025-04-06T00:24:06.171Z (about 1 year ago)
- Language: JavaScript
- Size: 1.7 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/aggregate-async-iterator)
[](https://spdx.org/licenses/0BSD.html)
[](https://typescriptlang.org)
[](https://bundlejs.com/?q=aggregate-async-iterator)
[](https://npmjs.org/package/aggregate-async-iterator)
[](https://github.com/arlac77/aggregate-async-iterator/issues)
[](https://actions-badge.atrox.dev/arlac77/aggregate-async-iterator/goto)
[](https://github.com/prettier/prettier)
[](http://commitizen.github.io/cz-cli/)
[](https://snyk.io/test/github/arlac77/aggregate-async-iterator)
[](https://coveralls.io/github/arlac77/aggregate-async-iterator)
# aggregate-async-iterator
Aggregates several async iterators into one (zip)
# usage
```js
import { aggregateRoundRobin, aggregateFifo } from "aggregate-async-iterator";
async function* sequence(name, time = 100, num = 10) {
for (let i = 0; i < num; i += 1) {
yield new Promise(resolve => setTimeout(resolve(name + i), time));
}
}
console.log("RR:");
for await (const r of aggregateRoundRobin([
sequence("A", 100, 3),
sequence("B", 35, 5)
])) {
console.log(r);
}
console.log("FIFO:");
for await (const r of aggregateFifo([
sequence("A", 100, 3),
sequence("B", 35, 5)
])) {
console.log(r);
}
```
Prints interleaved sequences
```txt
RR:
A0
B0
A1
B1
A2
B2
B3
B4
FIFO:
A0
B0
A1
B1
A2
B2
B3
B4
```
# API
### Table of Contents
* [aggregateFifo](#aggregatefifo)
* [Parameters](#parameters)
* [aggregateRoundRobin](#aggregateroundrobin)
* [Parameters](#parameters-1)
## aggregateFifo
Aggregate items from sevaral async iterators into one.
Items are collected first in first out from the sources.
Whatever source comes first will be delivered first.
### Parameters
* `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\>**
Returns **AsyncIterable\** items collected from all sources
## aggregateRoundRobin
Aggregate items from sevaral async iterators into one.
Items are collected round robin from the sources.
The 2nd. round of items will only be delivered after all sources
have delivered their 1st. round (or reached their end).
### Parameters
* `sources` **[Array](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array)\>**
Returns **AsyncIterable\** items collected from all sources
# install
With [npm](http://npmjs.org) do:
```shell
npm install aggregate-async-iterator
```
# license
BSD-2-Clause