Given the provided (very simple) generator, is it possible to return the generator back to its original state to use again?
var generator = function*() { yield 1; yield 2; yield 3; }; var iterable = generator(); for (let x of iterable) { console.log(x); } // At this point, iterable is consumed. // Is there a method for moving iterable back // to the start point by only without re-calling generator(), // (or possibly by re-calling generator(), only by using prototype // or constructor methods available within the iterable object) // so the following code would work again? for (let x of iterable) { console.log(x); }
I would like to be able to pass the iterable off to some other scope, iterate over it, do some other stuff, then be able to iterate over it again later on in that same scope.
Advertisement
Answer
If your intention is
to some other scope, iterate over it, do some other stuff, then be able to iterate over it again later on in that same scope.
Then the only thing you shouldn’t try doing is passing the iterator, instead pass the generator:
var generator = function*() { yield 1; yield 2; yield 3; }; var user = function(generator){ for (let x of generator()) { console.log(x); } for (let x of generator()) { console.log(x); } }
Or just make a “round robin” iterator and check while iterating
var generator = function*() { while(true){ yield 1; yield 2; yield 3; } }; for( x in i ){ console.log(x); if(x === 3){ break; } }