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