axax
Version:
A library of async iterator extensions for JavaScript including ```map```, ```reduce```, ```filter```, ```flatMap```, ```pipe``` and [more](https://github.com/jamiemccrindle/axax/blob/master/docs/API.md#functions).
38 lines (37 loc) • 1.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var subject_1 = require("./subject");
var toCallbacks_1 = require("./toCallbacks");
function spanAll(predicate) {
return function inner(source) {
var done = false;
var spanSubject = new subject_1.Subject();
spanSubject.finally(function () {
done = true;
});
var currentSubject = new subject_1.Subject();
spanSubject.onNext(currentSubject.iterator);
toCallbacks_1.toCallbacks(function (result) {
if (done) {
throw new toCallbacks_1.StopError();
}
if (result.done) {
currentSubject.onCompleted();
spanSubject.onCompleted();
return Promise.resolve();
}
if (predicate(result.value)) {
currentSubject.onCompleted();
currentSubject = new subject_1.Subject();
spanSubject.onNext(currentSubject.iterator);
}
else {
currentSubject.onNext(result.value);
}
// not handling back pressure at the moment
return Promise.resolve();
})(source);
return spanSubject.iterator;
};
}
exports.spanAll = spanAll;