UNPKG

@typed/effects

Version:

Generator-powered Effect management

27 lines 866 B
import { Disposable } from '@typed/disposable'; import { provide, Resume, runPure } from '@typed/env'; import { runEffect } from '../run'; export function* race(...effects) { const env = (c) => Resume.create((cb) => { const disposable = Disposable.lazy(); const ifNotResolved = createIfNotResolved(cb, disposable); for (const effect of effects) { const pure = provide(runEffect(effect), c); disposable.addDisposable(runPure(ifNotResolved, pure)); } return disposable; }); return yield env; } function createIfNotResolved(cb, disposable) { let resolved = false; return (value) => { if (!resolved) { resolved = true; disposable.dispose(); return cb(value); } return Disposable.None; }; } //# sourceMappingURL=race.js.map