首页 > 解决方案 > 如何正确使用 share() 运算符?

问题描述

next()我有由Rx 方法触发的流BehaviorSubject。如何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));

标签: rxjsrxjs6reactivex

解决方案


看起来您需要移动share到下方map以获得所需的行为。


推荐阅读