难以理解可观察的角度。
我正在创建一个观察对象,它发出一次随机数。
我有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>
它如何发出与订阅者一样多的事件?
答案 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是响应式开发人员最好的朋友。