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()
以订阅该主题的来源。
添加回答
举报