Skip to content

damianc/hot-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hot Generator

Wraps a generator so that it shares the current value among all the instances.

Usage

var hotNums = new HotGenerator(function* () {
	yield* [1, 2, 3, 4];
});

var genA = hotNums();
var genB = hotNums();

genA.next();
// {value: 1, done: false}

genB.next();
// {value: 2, done: false}

genA.next();
// {value: 3, done: false}

genB.next();
// {value: 4, done: false}

genA.next();
// {value: undefined, done: true}

last() method

The last() method of HotGenerator receives the last known value returned from any instance of a generator.

var hotNums = new HotGenerator(function* () {
	yield* [1, 2, 3, 4];
});

var genA = hotNums();
var genB = hotNums();

genA.next();
// {value: 1, done: false}

genB.next();
// {value: 2, done: false}

hotNums.last();
// {value: 2, done: false}

lastFrom() method

Similar to the last() method, but here we can explicitly tell what instance of a generator we are interested in.

var hotNums = new HotGenerator(function* () {
	yield* [1, 2, 3, 4];
});

var genA = hotNums();
var genB = hotNums();

genA.next();
// {value: 1, done: false}

genB.next();
// {value: 2, done: false}

genA.next();
// {value: 3, done: false}

hotNums.last();
// {value: 3, done: false}

hotNums.lastFrom(genA);
// {value: 3, done: false}

hotNums.lastFrom(genB);
// {value: 2, done: false}

Caveats

Currently it is impossible to pass arguments to any of the generators. The problem is that each newest instance of a generator would override behavior of all previous, so far defined generators.