UNPKG

@virtualstate/examples

Version:
82 lines 2.41 kB
import { deferred } from "./deferred.js"; /** * Returns an async iterable that moves forward in value * Whenever an iterator is added, it will start at the most recent value * that was yielded, and continue from there */ export function queue(enabled) { let done = false; let current = deferred(); let value; let error; const q = { value(nextValue) { if (enabled !== false) { value = nextValue; const previous = current; current = deferred(); previous.resolve({ next: current.promise, value: nextValue, done: false }); } return nextValue; }, end() { done = true; if (enabled !== false) { current.resolve({ value: undefined, done: true, next: current.promise }); } }, reject(nextError) { if (done) return; done = true; if (enabled !== false) { error = nextError; current.reject(nextError); } }, [Symbol.asyncIterator]() { let initialValue = value; let result = { next: current.promise }; return { async next() { if (typeof initialValue !== "undefined") { const result = { value: initialValue, done: false }; initialValue = undefined; return result; } result = await result.next; return { value: result.value, done: result.done }; } }; }, async then(resolve, reject) { if (error) { return reject(error); } if (done) { return resolve(value); } return wait().then(resolve, reject); async function wait() { let value; for await (value of q) { } return value; } } }; return q; } //# sourceMappingURL=queue.js.map