1 | import { AsyncIterableX } from './asynciterablex';
|
2 | import { sleep } from './_sleep';
|
3 | class GenerateTimeAsyncIterable extends AsyncIterableX {
|
4 | constructor(initialState, condition, iterate, resultSelector, timeSelector) {
|
5 | super();
|
6 | this._initialState = initialState;
|
7 | this._condition = condition;
|
8 | this._iterate = iterate;
|
9 | this._resultSelector = resultSelector;
|
10 | this._timeSelector = timeSelector;
|
11 | }
|
12 | async *[Symbol.asyncIterator]() {
|
13 | for (let i = this._initialState; await this._condition(i); i = await this._iterate(i)) {
|
14 | const time = await this._timeSelector(i);
|
15 | await sleep(time);
|
16 | yield await this._resultSelector(i);
|
17 | }
|
18 | }
|
19 | }
|
20 | export function generateTime(initialState, condition, iterate, resultSelector, timeSelector) {
|
21 | return new GenerateTimeAsyncIterable(initialState, condition, iterate, resultSelector, timeSelector);
|
22 | }
|
23 |
|
24 |
|