shelving
Version:
Toolkit for using data in JavaScript.
32 lines (31 loc) • 1.67 kB
TypeScript
import type { Deferred } from "../util/async.js";
import { AbstractSequence } from "./AbstractSequence.js";
/**
* Deferred sequence of values that can be async iterated and new values can be published.
* - Implements `AsyncIterable` so values can be iterated over using `for await...of`
* - Implements `Promise` so the next value can be awaited.
* - Implements `Deferred` so next values can be resolved or rejected.
*/
export declare class DeferredSequence<T = void> extends AbstractSequence<T, void, void> implements Deferred<T>, Promise<T> {
/**
* Next deferred to be rejected/resolved, or `undefined` if we haven't requested one yet..
* - Only create the deferred on demand, because we don't want to reject a deferred that isn't used to or it would throw an unhandled promise error.
*/
private _deferred;
/** Get the next promise to be deferred/rejected. */
get promise(): Promise<T>;
/** Resolve the current deferred in the sequence. */
resolve(value: T): void;
private _nextValue;
/** Reject the current deferred in the sequence. */
reject(reason: unknown): void;
private _nextReason;
/** Fulfill the current deferred by resolving or rejecting it. */
private _fulfill;
next(): Promise<IteratorResult<T, void>>;
then<X = T, Y = never>(onNext?: (v: T) => X | PromiseLike<X>, onError?: (r: unknown) => Y | PromiseLike<Y>): Promise<X | Y>;
catch<Y>(onError: (r: unknown) => Y | PromiseLike<Y>): Promise<T | Y>;
finally(onFinally: () => void): Promise<T>;
/** Resolve the current deferred from a sequence of values. */
through(sequence: AsyncIterable<T>): AsyncIterator<T>;
}