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)
);

輸出

multicast Operator

如果您看到輸出,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();

如果您現在看到被呼叫的訂閱者之間共享相同的值。

輸出

multicast Operator
廣告
© . All rights reserved.