@thi.ng/rstream
Version:
Reactive streams & subscription primitives for constructing dataflow graphs / pipelines
46 lines (45 loc) • 892 B
JavaScript
import { isReduced } from "@thi.ng/transducers/reduced";
const transduce = (src, xform, rfn, init) => {
let acc = init !== void 0 ? init : rfn[0]();
let sub;
return new Promise((resolve, reject) => {
sub = src.subscribe(
{
next(x) {
let _acc;
try {
_acc = rfn[2](acc, x);
} catch (e) {
reject(e);
return;
}
if (isReduced(_acc)) {
resolve(_acc.deref());
} else {
acc = _acc;
}
},
done() {
resolve(acc);
},
error(e) {
reject(e);
return false;
}
},
{ xform }
);
}).then(
(fulfilled) => {
sub.unsubscribe();
return fulfilled;
},
(rejected) => {
sub.unsubscribe();
throw rejected;
}
);
};
export {
transduce
};