UNPKG

rxjs-autorun

Version:

Autorun expressions with RxJS Observables

54 lines (53 loc) 1.51 kB
import { distinctUntilChanged } from 'rxjs/operators'; import { forwardTracker, runner } from './core'; /** * Function to track Observable inside rxjs-autorun expressions * * Also provides `.weak`, `.normal` (default), and `.strong` types of tracking */ export var $ = forwardTracker('$'); /** * Function to read latest Observable value (w/o tracking it) inside rxjs-autorun expressions * * Also provides `.weak`, `.normal` (default), and `.strong` types of tracking */ export var _ = forwardTracker('_'); /** * Automatically run `fn` when tracked inner Observables emit * * ```js * autorun(() => _(a) + $(b)) * ``` * * @param fn Function that uses tracked (`$`) or untracked (`_`) Observables * @returns RxJS Subscription of distinct execution results */ export function autorun(fn) { return combined(fn).subscribe(); } /** * Automatically run `fn` when tracked inner Observables emit * * ```js * combined(() => _(a) + $(b)) * ``` * * @param fn Function that uses tracked (`$`) or untracked (`_`) Observables * @returns Observable of execution results */ export function combined(fn) { return runner(fn); } /** * Automatically run `fn` when tracked inner Observables emit a **distinct value** * * ```js * computed(() => _(a) + $(b)) * ``` * * @param fn Function that uses tracked (`$`) or untracked (`_`) Observables * @returns Observable of distinct execution results */ export function computed(fn) { return runner(fn, true).pipe(distinctUntilChanged()); }