UNPKG

@reactivex/ix-es5-esm

Version:

The Interactive Extensions for JavaScript

69 lines (67 loc) 3.52 kB
import { __asyncGenerator, __await, __extends, __generator } from "tslib"; import { AsyncIterableX } from './asynciterablex.js'; import { sleep } from './_sleep.js'; import { throwIfAborted } from '../aborterror.js'; var GenerateTimeAsyncIterable = /** @class */ (function (_super) { __extends(GenerateTimeAsyncIterable, _super); function GenerateTimeAsyncIterable(initialState, condition, iterate, resultSelector, timeSelector) { var _this = _super.call(this) || this; _this._initialState = initialState; _this._condition = condition; _this._iterate = iterate; _this._resultSelector = resultSelector; _this._timeSelector = timeSelector; return _this; } GenerateTimeAsyncIterable.prototype[Symbol.asyncIterator] = function (signal) { return __asyncGenerator(this, arguments, function _a() { var i, time; return __generator(this, function (_b) { switch (_b.label) { case 0: throwIfAborted(signal); i = this._initialState; _b.label = 1; case 1: return [4 /*yield*/, __await(this._condition(i, signal))]; case 2: if (!_b.sent()) return [3 /*break*/, 10]; return [4 /*yield*/, __await(this._timeSelector(i, signal))]; case 3: time = _b.sent(); return [4 /*yield*/, __await(sleep(time, signal))]; case 4: _b.sent(); return [4 /*yield*/, __await(this._resultSelector(i, signal))]; case 5: return [4 /*yield*/, __await.apply(void 0, [_b.sent()])]; case 6: return [4 /*yield*/, _b.sent()]; case 7: _b.sent(); _b.label = 8; case 8: return [4 /*yield*/, __await(this._iterate(i, signal))]; case 9: i = _b.sent(); return [3 /*break*/, 1]; case 10: return [2 /*return*/]; } }); }); }; return GenerateTimeAsyncIterable; }(AsyncIterableX)); /** * Generates an async-iterable sequence by running a time-based state-driven loop producing the sequence's elements. * * @template TState The type of the state used in the generator loop. * @template TResult The type of the elements in the produced sequence. * @param {TState} initialState The initial state. * @param {((value: TState, signal?: AbortSignal) => boolean | Promise<boolean>)} condition Condition to terminate generation (upon returning false). * @param {((value: TState, signal?: AbortSignal) => TState | Promise<TState>)} iterate Iteration step function. * @param {((value: TState, signal?: AbortSignal) => TResult | Promise<TResult>)} resultSelector Selector function for results produced in * the sequence. * @param {((value: TState, signal?: AbortSignal) => number | Promise<number>)} timeSelector Selector function for how much time to wait. * @returns {AsyncIterableX<TResult>} The generated async-iterable sequence. */ export function generateTime(initialState, condition, iterate, resultSelector, timeSelector) { return new GenerateTimeAsyncIterable(initialState, condition, iterate, resultSelector, timeSelector); } //# sourceMappingURL=generatetime.js.map