cached-iterable exposes two classes which implement the iterable
protocol:
CachedSyncIterable,CachedAsyncIterable.
You can wrap any iterable in these classes to create a new iterable which caches the yielded elements. This is useful for iterating over an iterable many times without depleting it.
cached-iterable can be used both on the client-side and the server-side. You
can install it from the npm registry or use it as a standalone script (as the
CachedIterable global).
npm install cached-iterable
importassertfrom"assert";import{CachedSyncIterable}from"cached-iterable";function*countdown(i){while(i--){yieldi;}}letnumbers=newCachedSyncIterable(countdown(3));// `numbers` can be iterated over multiple times.assert.deepEqual([...numbers],[3,2,1,0]);assert.deepEqual([...numbers],[3,2,1,0]);For legacy browsers, the compat build has been transpiled using Babel's env
preset. It requires the regenerator runtime provided by babel-polyfill.
import{CachedSyncIterable}from'cached-iterable/compat';