UNPKG

@reactivex/ix-es2015-cjs

Version:

The Interactive Extensions for JavaScript

47 lines (45 loc) 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateTime = void 0; const tslib_1 = require("tslib"); const asynciterablex_js_1 = require("./asynciterablex.js"); const _sleep_js_1 = require("./_sleep.js"); const aborterror_js_1 = require("../aborterror.js"); class GenerateTimeAsyncIterable extends asynciterablex_js_1.AsyncIterableX { constructor(initialState, condition, iterate, resultSelector, timeSelector) { super(); this._initialState = initialState; this._condition = condition; this._iterate = iterate; this._resultSelector = resultSelector; this._timeSelector = timeSelector; } [Symbol.asyncIterator](signal) { return tslib_1.__asyncGenerator(this, arguments, function* _a() { (0, aborterror_js_1.throwIfAborted)(signal); for (let i = this._initialState; yield tslib_1.__await(this._condition(i, signal)); i = yield tslib_1.__await(this._iterate(i, signal))) { const time = yield tslib_1.__await(this._timeSelector(i, signal)); yield tslib_1.__await((0, _sleep_js_1.sleep)(time, signal)); yield yield tslib_1.__await(yield tslib_1.__await(this._resultSelector(i, signal))); } }); } } /** * 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. */ function generateTime(initialState, condition, iterate, resultSelector, timeSelector) { return new GenerateTimeAsyncIterable(initialState, condition, iterate, resultSelector, timeSelector); } exports.generateTime = generateTime; //# sourceMappingURL=generatetime.js.map