首页 > 解决方案 > 在 ReactiveX 中为另一个主题创建计算主题

问题描述

Subject在 RX 中可以存储价值并被其他人订阅。我可以知道是否有办法使 aSubject依赖于另一个Subject作为源的计算版本Subject

标签: c#functional-programmingrxjsreactiverx.net

解决方案


在某种程度上……是的!

可以定义彼此之间的可观察流。因此,虽然从另一个主题创建“计算主题”可能没有真正意义,但您可以创建一个依赖于主题的可观察对象,从而产生一个在源主题发出时发出的可观察对象。

示例:(堆栈闪电战

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$也会发出。


推荐阅读