3 回答

TA貢獻(xiàn)1799條經(jīng)驗 獲得超6個贊
一個Subject
或Observable
沒有的電流值。發(fā)出值時,將其傳遞給訂戶并Observable
使用它完成。
如果要使用當(dāng)前值,請使用BehaviorSubject
專門用于該目的的值。BehaviorSubject
保留最后發(fā)出的值,并立即將其發(fā)送給新訂戶。
它還具有一種getValue()
獲取當(dāng)前值的方法。

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