observe.ts
Назначение файла
Преобразование Atom Nrgy в RxJS Observable.
Общая информация
observe — это обратная функция для fromObservable. Она позволяет реагировать на изменения атома, используя мощные операторы RxJS. Она представляет значение Atom как RxJS Observable. Значение атома передается подписчикам Observable с помощью effect.
Концептуальная архитектура
При подписке на возвращаемый Observable создается effect для исходного атома. Каждое изменение атома вызывает subscriber.next(value). Ошибки атома также транслируются в Observable.
По умолчанию используется shareReplay(), чтобы новые подписчики получали текущее значение атома немедленно. Если включена опция onlyChanges, вместо этого используется share(), а начальное значение пропускается.
Внутренний effect управляется в рамках Scope, который привязан к жизненному циклу подписки Observable, а также отслеживает уничтожение исходного атома.
Описание публичного API
observe<T>(source: Atom<T>, options?: ObserveOptions): Observable<T>
Возвращает Observable<T>, транслирующий значения из source.
ObserveOptions
sync: выполнение эффекта синхронно (falseпо умолчанию).onlyChanges: еслиtrue, тоObservableпропустит текущее значение и будет выдавать только последующие изменения (falseпо умолчанию).
Примеры использования
Базовое использование
import { atom } from '@nrgyjs/core';
import { observe } from '@nrgyjs/rxjs';
import { map } from 'rxjs';
const count = atom(1);
const count$ = observe(count).pipe(map((c) => c * 10));
count$.subscribe((v) => console.log(v)); // 10
count.set(2); // 20Использование onlyChanges
import { atom } from '@nrgyjs/core';
import { observe } from '@nrgyjs/rxjs';
const count = atom(1);
const count$ = observe(count, { onlyChanges: true });
count$.subscribe((v) => console.log(v)); // (ничего сразу)
count.set(2); // 2