UNPKG

react-async-iterators

Version:

The magic of JavaScript async iterators in React ⛓️ 🧬 🔃

41 lines 1.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.iterateAsyncIterWithCallbacks = iterateAsyncIterWithCallbacks; function iterateAsyncIterWithCallbacks(iterable, initialValue, changeCb) { const iterator = iterable[Symbol.asyncIterator](); let iteratorClosedByConsumer = false; let lastValue = initialValue; (async () => { try { const { done, value } = await iterator.next(); if (iteratorClosedByConsumer) { return; } if (!done) { lastValue = value; changeCb({ value, done: false, error: undefined }); // Ensuring the first yield is exempt from the "different from previous value" check for await (const value of { [Symbol.asyncIterator]: () => iterator }) { if (!iteratorClosedByConsumer && !Object.is(value, lastValue)) { lastValue = value; changeCb({ value, done: false, error: undefined }); } } } if (!iteratorClosedByConsumer) { changeCb({ value: lastValue, done: true, error: undefined }); } } catch (err) { if (!iteratorClosedByConsumer) { changeCb({ value: lastValue, done: true, error: err }); } } })(); return () => { if (!iteratorClosedByConsumer) { iteratorClosedByConsumer = true; iterator.return?.(); } }; } //# sourceMappingURL=iterateAsyncIterWithCallbacks.js.map