如何正确使用share()运算符



我有由RxBehaviorSubjectnext()方法触发的流。如何在订阅者之间共享pipedData$流?

我尝试在这里使用share运算符,以避免在map运算符中进行大量的重新计算,但运气不好——每个订阅者都会进行重新计算。

这是这期的stackblitz

还有可能从源中获取订阅用户的数量吗?

import { interval, BehaviorSubject } from 'rxjs';
import { take, map, tap, share, debounceTime } from 'rxjs/operators';
const data$ = new BehaviorSubject(null);
interval(1000).pipe(
tap(x => console.log('emit:')),
take(3)
).subscribe((x)=>{
data$.next(x)
});
const pipedData$ = data$.pipe(
debounceTime(30),
share(),
map(x => Math.random()),
);
console.log("--=-=-=-=--=-=----=-=-=-=-==-")
pipedData$.subscribe(x => console.log(x));
pipedData$.subscribe(x => console.log(x));
pipedData$.subscribe(x => console.log(x));

看起来您需要将share移动到map之下才能获得所需的行为。

最新更新