mix-async-generator
Version:
``` npm i mix-async-generator ```
71 lines (70 loc) • 2.49 kB
TypeScript
export declare namespace MixAsyncGenerator {
type AG<NextOut = unknown, Return = unknown, NextIn = unknown> = [
NextOut,
Return,
NextIn
];
type Gen<T extends AG, B extends boolean = boolean> = {
name: string;
runner: AsyncGenerator<T[0], T[1], T[2]>;
/**替补元素/惰性元素
* 意味着只有到不得不用的时候才会去使用
*/
bench: B;
/**当前的步伐 */
currentStep: IteratorResult<T[0], T[1]> | undefined;
/**偷跑的步数,默认是0
* 偷跑意味着它始终会努力提供jumpGun个result
* 替补元素也可以偷跑,但只有轮到它上场才能偷跑
*/
jumpGun: number;
/**缓存在队列中的步伐数 */
inQueueSteps: number;
};
type Result<T extends AG> = {
step: IteratorResult<T[0], T[1]>;
from?: Gen<T>;
};
type ResultWithFrom<T extends AG, B extends boolean = boolean> = {
step: IteratorResult<T[0], T[1]>;
from: Gen<T, B>;
};
type Error<T extends AG> = {
from: Gen<T>;
reason: unknown;
};
}
export declare class MixAsyncGenerator<T extends MixAsyncGenerator.AG = MixAsyncGenerator.AG> {
private _allGenList;
join(runner: AsyncGenerator<T[0], T[1], T[2]>, opts?: {
name?: string;
bench?: boolean;
jumpGun?: number;
}): MixAsyncGenerator.Gen<T, boolean>;
private _join;
remove(gen: MixAsyncGenerator.Gen<T>): boolean;
private _enqueueGen;
private _dequeueGen;
/**正在执行中的任务,等待返回后就从这个集合中移除 */
private _runnings;
private _handleGen;
/**候补队列 */
private _benchGen;
/**自由队列 */
private _freeGen;
private _genWaitter;
/**入列
* 这个函数与_handleGen是紧密关联的,是_handleGen的一部分
*/
private _enqueueResult;
/**出列 */
private _dequeueResult;
private _freeResult;
private _benchResult;
private _resultWaiter;
readonly onError: import("evt/lib/types").Evt<MixAsyncGenerator.Error<T>>;
next(): MixAsyncGenerator.ResultWithFrom<T, true> | MixAsyncGenerator.ResultWithFrom<T, false> | Promise<MixAsyncGenerator.Result<T>>;
get isDone(): boolean;
toAsyncIterator(): AsyncGenerator<T[0], void, unknown>;
toPromise(): Promise<void>;
}