@async-generators/subject
TypeScript icon, indicating that this package has built-in type declarations

0.5.0 • Public • Published

subject

logo

push items to pulling iterators

NPM version Travis Status Travis Status

Install

npm install @async-generators/subject --save
yarn add @async-generators/subject

This package's main entry points to a commonjs dist. The module entry points to a es2015 module dist. Both require native async-generator support, or be down-compiled with a webpack loader.

Api

Soupler()

Subject that provides three methods: next(item), error(err), and done() to push data and events. When [Symbol.asyncIterator] is called an internal subscription is created. pushed items are buffered (per iterator) until they are pulled by the consuming iterator. If the consuming iterator pulls items slower than the speed they are pushed to the subject, then the internal buffer will continue to grow in size. error(err) will cause the iterator to rethrow the given error to the consumer and dispose of the subject.

Example

example.js

const {Subject} = require('@async-generators/subject');

let subject = new Subject<number>();

async function* source(){
  yield 1; yield 2; yield 3; yield 4;
}

async function main() {
  let reader = async function () {
    for await (let item of subject) {
      console.log("PULL:", item);
    }
  };

  let readers = [reader(), reader()];
  
  let writer = async function () {
    for await (let item of source()){
      console.log("PUSH:", item);
      subject.next(item);
    }
    subject.done();
  }

  await writer();
  await Promise.all(readers);
}

main().catch(console.log);

Execute with the latest node.js 9:

node --harmony example.js

output:

PUSH: 1
PUSH: 2
PULL: 1
PULL: 1
PUSH: 3
PULL: 2
PULL: 2
PUSH: 4
PULL: 3
PULL: 3
PULL: 4
PULL: 4

Typescript

This library is fully typed and can be imported using:

import {Subject} from '@async-generators/subject');

It is also possible to directly execute your properly configured typescript with ts-node:

ts-node --harmony foo.ts

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.5.0
    374
    • latest

Version History

Package Sidebar

Install

npm i @async-generators/subject

Weekly Downloads

695

Version

0.5.0

License

MIT

Last publish

Collaborators

  • meirionhughes