UNPKG

@thi.ng/rstream

Version:

Reactive streams & subscription primitives for constructing dataflow graphs / pipelines

46 lines (45 loc) 892 B
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 };