3 回答
TA貢獻1799條經驗 獲得超6個贊
一個Subject或Observable沒有的電流值。發出值時,將其傳遞給訂戶并Observable使用它完成。
如果要使用當前值,請使用BehaviorSubject專門用于該目的的值。BehaviorSubject保留最后發出的值,并立即將其發送給新訂戶。
它還具有一種getValue()獲取當前值的方法。
TA貢獻1850條經驗 獲得超11個贊
您應該 從“可觀察/主題”中獲取值之外的唯一方法是訂閱!
如果您使用的getValue()是聲明式范例,則必須執行某些操作。它可以作為逃生艙口,但是99.9%的時間不應該使用getValue()。有一些有趣的事情getValue()可以做:如果主題未訂閱,它將引發錯誤;如果主題由于錯誤而死亡,它將阻止您獲取值。等等。但是,再次出現是為了逃脫在極少數情況下孵化。
有幾種以“ Rx-y”方式從Subject或Observable獲取最新值的方法:
使用
BehaviorSubject:但實際上是訂閱它。首次訂閱時BehaviorSubject,它將同步發送它收到或初始化時使用的先前值。使用
ReplaySubject(N):這將緩存N值并將其重播給新訂戶。A.withLatestFrom(B):使用此運算符可以B在可觀察到的A發射時從可觀察的獲取最新值。將在數組中同時提供兩個值[a, b]。A.combineLatest(B):使用此操作來得到最新的值A和B每一次無論是A或B發出。將在數組中同時提供兩個值。shareReplay():通過進行可觀察的多播ReplaySubject,但允許您在發生錯誤時重試可觀察的。(基本上,它為您提供了promise-y緩存行為)。publishReplay(),publishBehavior(initialValue),multicast(subject: BehaviorSubject | ReplaySubject),等:其它運營商,充分利用BehaviorSubject和ReplaySubject。相同事物的口味不同,它們基本上通過將所有通知集中到主題中來多播可觀察的源。您需要致電connect()以訂閱該主題的來源。
添加回答
舉報
