rxjs-autorun
Version:
Autorun expressions with RxJS Observables
54 lines (53 loc) • 1.51 kB
JavaScript
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());
}