Skip to content

rubensworks/asyncreiterable.js

Repository files navigation

AsyncReiterable

Build Status Coverage Status npm version An AsyncReiterable is an append-only collection that allows multiple asynchronous iterations.

Each time the iterator() method of this AsyncReiterable is called, a new AsyncIterator is produced.

This package can be used in cases where you need an AsyncIterator, but you need to be able to iterate over them multiple times.

Install

$ npm install asyncreiterable

Usage

At the time of writing, this package provides AsyncReiterableArray, an array-backed implementation of the AsyncReiterable interface.

Constructing

It can be constructed in different ways through the following static methods:

import {AsyncReiterableArray} from "asyncreiterable";

# Creates an ended AsyncReiterable with the given data elements
AsyncReiterableArray.fromFixedData([1, 2, 3])

# Creates an open-ended AsyncReiterable with the given initial data elements
AsyncReiterableArray.fromInitialData([1, 2, 3])

# Creates an open-ended AsyncReiterable with no initial data elements
AsyncReiterableArray.fromInitialEmpty()

Appending

Data elements can only be pushed, no data elements can be removed.

The iterable becomes ended when null is pushed.

const iterable = AsyncReiterableArray.fromInitialData([1, 2, 3])

# Add data elements
iterable.push(4);
iterable.push(5);
iterable.push(6);

# End the iterable
iterable.push(null);

Iterating

AsyncReiterable that are either ended or not ended yet can both be iterated.

The iterator() method returns an AsyncIterator that will contains all current and future data elements in this AsyncReiterable. It will be ended once the AsyncReiterable is ended.

const iterable = AsyncReiterableArray.fromInitialData([1, 2])

const it1 = iterable.iterator();
const it2 = iterable.iterator();

it1.on('data', console.log);
it2.on('data', console.log);

iterable.push(3);
iterable.push(4);
iterable.push(null);

# Output from both iterators:
#   1
#   2
#   3
#   4

License

This software is written by Ruben Taelman.

This code is released under the MIT license.

About

An AsyncReiterable is an append-only collection that allows multiple asynchronous iterations.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •