【发布时间】:2021-05-27 12:55:35
【问题描述】:
RX 中的Subject 可以存储价值并被其他人订阅。我可以知道是否有办法使Subject 依赖于另一个Subject 作为源Subject 的计算版本?
【问题讨论】:
标签: c# functional-programming rxjs reactive rx.net
RX 中的Subject 可以存储价值并被其他人订阅。我可以知道是否有办法使Subject 依赖于另一个Subject 作为源Subject 的计算版本?
【问题讨论】:
标签: c# functional-programming rxjs reactive rx.net
在某种程度上......是的!
可以定义彼此之间的可观察流。因此,虽然从另一个主题创建“计算主题”可能没有真正意义,但您可以创建一个依赖于主题的可观察对象,从而产生一个可在源主题发出时发出的可观察对象。
示例:(StackBlitz)
const user$ = new Subject<User>(); // Subject source
const greeting$ = user$.pipe( // Observable source
map(user => `Hello ${user.name}!`)
);
user$.subscribe(
val => console.log('user$: ', val)
);
greeting$.subscribe(
val => console.log('greeting$: ', val)
);
user$.next({ id: 1, name: 'mannok' });
user$.next({ id: 2, name: 'BizzyBob' });
// Output:
// > { id: 1, name 'mannok' }
// > Hello, mannok!
// > { id: 2, name 'BizzyBob' }
// > Hello, BizzyBob!
greeting$ 派生自 user$,因此每当 user$ 主题发出时,greeting$ 也会发出。
【讨论】:
observable.Select(/* you lambda function used to transform */)
Subject,我可以通过访问.Value(在Rx.NET 中)来获取它的当前值。您提供的解决方案无法获得greeting$ 的当前值。有什么建议可以检索派生 Observable 的当前值吗?
Subjects 也不提供此功能(Get value from Subject?),但 BehaviorSubject 有一个 getValue() 方法用于此目的。但是,从主题/行为主题派生的可观察对象只是普通的可观察对象,没有 getValue() 方法。 :-(