Angular Observable发出与订户一样多的事件

时间:2019-03-05 21:37:49

标签: angular rxjs observable

难以理解可观察的角度。 我正在创建一个观察对象,它发出一次随机数。 我有2个订阅者,我得到两个不同的号码。 如果我有3个订阅者,我会得到3个不同的号码。 我知道observable只能得到1个数字。

const observable = Rx.Observable.create((observer) => {
  observer.next(Math.random());
});
  
// subscription 1
observable.subscribe((data) => {
  console.log('Observer Subscriber A:', data); 
});
  
// subscription 2
observable.subscribe((data) => {
 console.log('Observer Subscriber B:', data); 
});

// subscription 3
observable.subscribe((data) => {
  console.log('Observer Subscriber C:', data); 
 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>

它如何发出与订阅者一样多的事件?

2 个答案:

答案 0 :(得分:3)

您可以使用share()运算符来多播值。

https://www.learnrxjs.io/operators/multicasting/share.html

const observable = Observable.create((observer) => {
  observer.next(Math.random());
}).pipe(share());

观察者功能在每个订阅者附加到可观察对象时执行。 share 运算符进行订阅并创建一个新的Observable,它将发出最后一个值。

答案 1 :(得分:0)

改为使用BehaviorSubject。

const { BehaviorSubject } = rxjs;

const observable$ = new BehaviorSubject(Math.random());

observable$.subscribe((data) => {
  console.log('Observer Subscriber A:', data); 
});

// subscription 2
observable$.subscribe((data) => {
 console.log('Observer Subscriber B:', data); 
});

// subscription 3
observable$.subscribe((data) => {
  console.log('Observer Subscriber C:', data); 
});

observable$.next(Math.random());
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.4.0/rxjs.umd.min.js"></script>

BehaviorSubjects是响应式开发人员最好的朋友。