RxJS - 多播運算子 multicast
多播運算子與其他訂閱者共享建立的單個訂閱。multicast 採用的引數是主題或返回 ConnectableObservable 的工廠方法,該 ConnectableObservable 必須具有 connect() 方法。要訂閱,必須呼叫 connect() 方法。
語法
multicast(subjectOrSubjectFactory: Subject): OperatorFunction
引數
subjectOrSubjectFactory:傳遞給 multicast 的引數是主題或返回主題的工廠方法。
在我們瞭解 multicast() 運算子的工作原理之前,讓我們先了解一下 multicast() 運算子如何提供幫助。
考慮以下具有訂閱的簡單可觀察物件的示例 -
示例
import { Observable } from 'rxjs';
var observable = new Observable(function subscribe(subscriber) {
try {
subscriber.next(Math.random());
} catch (e) {
subscriber.error(e);
}
});
const subscribe_one = observable.subscribe(val => console.log(
"Value from Sub1 = "+val)
);
const subscribe_two = observable.subscribe(val => console.log(
"Value from Sub2 = "+val)
);
輸出
如果您看到輸出,Sub1 和 Sub2 的值不同。這是因為當呼叫訂閱者時,可觀察物件重新啟動並提供可用的新值。但是,我們需要讓被呼叫的訂閱者具有相同的值。
在這裡,我們有 multicast() 運算子來幫助我們完成它。
示例
import { Observable,Subject } from 'rxjs';
import { take, multicast, mapTo } from 'rxjs/operators';
var observable = new Observable(function subscribe(subscriber) {
try {
subscriber.next(Math.random());
} catch (e) {
subscriber.error(e);
}
});
const multi_op = observable.pipe(multicast(() => new Subject()));
const subscribe_one = multi_op.subscribe(
x => console.log("Value from Sub1 = "+x)
);
const subscribe_two = multi_op.subscribe(
x => console.log("Value from Sub2 = "+x)
);
multi_op.connect();
如果您現在看到被呼叫的訂閱者之間共享相同的值。
輸出
廣告