如何正确使用 share() 运算符?
How do I use share() operator properly?
我有由 Rx BehaviorSubject
的 next()
方法触发的流。如何在订阅者之间共享 pipedData$
流?
我尝试在此处使用 share
运算符以避免在 map
运算符内部进行大量重新计算,但没有成功 - 每个订阅者都会产生重新计算。
here's stackblitz for this issue
还有可能从源中获取订阅者数量吗?
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
下面才能获得所需的行为。
我有由 Rx BehaviorSubject
的 next()
方法触发的流。如何在订阅者之间共享 pipedData$
流?
我尝试在此处使用 share
运算符以避免在 map
运算符内部进行大量重新计算,但没有成功 - 每个订阅者都会产生重新计算。
here's stackblitz for this issue
还有可能从源中获取订阅者数量吗?
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
下面才能获得所需的行为。