@reactivex/ix-es5-esm
Version:
The Interactive Extensions for JavaScript
76 lines (74 loc) • 3.22 kB
JavaScript
import { __asyncGenerator, __await, __extends, __generator } from "tslib";
import { AsyncIterableX } from '../asynciterablex.js';
import { wrapWithAbort } from './withabort.js';
import { throwIfAborted } from '../../aborterror.js';
/** @ignore */
var SliceAsyncIterable = /** @class */ (function (_super) {
__extends(SliceAsyncIterable, _super);
function SliceAsyncIterable(source, begin, end) {
var _this = _super.call(this) || this;
_this._source = source;
_this._begin = begin;
_this._end = end;
return _this;
}
SliceAsyncIterable.prototype[Symbol.asyncIterator] = function (signal) {
return __asyncGenerator(this, arguments, function _a() {
var source, it, begin, next, _b, end;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
throwIfAborted(signal);
source = wrapWithAbort(this._source, signal);
it = source[Symbol.asyncIterator]();
begin = this._begin;
_c.label = 1;
case 1:
_b = begin > 0;
if (!_b) return [3 /*break*/, 3];
return [4 /*yield*/, __await(it.next())];
case 2:
_b = !(next = _c.sent()).done;
_c.label = 3;
case 3:
if (!_b) return [3 /*break*/, 4];
begin--;
return [3 /*break*/, 1];
case 4:
end = this._end;
if (!(end > 0)) return [3 /*break*/, 9];
_c.label = 5;
case 5: return [4 /*yield*/, __await(it.next())];
case 6:
if (!!(next = _c.sent()).done) return [3 /*break*/, 9];
return [4 /*yield*/, __await(next.value)];
case 7: return [4 /*yield*/, _c.sent()];
case 8:
_c.sent();
if (--end === 0) {
return [3 /*break*/, 9];
}
return [3 /*break*/, 5];
case 9: return [2 /*return*/];
}
});
});
};
return SliceAsyncIterable;
}(AsyncIterableX));
export { SliceAsyncIterable };
/**
* Returns the elements from the source async-iterable sequence only after the function that returns a promise produces an element.
*
* @template TSource The type of elements in the source sequence.
* @param {number} begin Zero-based index at which to begin extraction.
* @param {number} [end=Infinity] Zero-based index before which to end extraction.
* @returns {MonoTypeOperatorAsyncFunction<TSource>} An async-iterable containing the extracted elements.
*/
export function slice(begin, end) {
if (end === void 0) { end = Infinity; }
return function sliceOperatorFunction(source) {
return new SliceAsyncIterable(source, begin, end);
};
}
//# sourceMappingURL=slice.js.map