Rxjs--多播操做符

多播(multicast、share、publish)...html

多播能夠經過 Subject.asObservable 將Subject轉成後Observable 使用操做符並訂閱es6

若是不想顯式調用 connect(),咱們能夠使用 ConnectableObservable 的 refCount() 方法(引用計數),這個方法返回 Observable,這個 Observable 會追蹤有多少個訂閱者。當訂閱者的數量從0變成1,它會調用connect() 以開啓共享的執行。當訂閱者數量從1變成0時,它會徹底取消訂閱,中止進一步的執行函數

refCount的做用是,當有第一個訂閱者時,多播 Observable 會自動地啓動執行,而當最後一個訂閱者離開時,多播 Observable 會自動地中止執行。spa

multicast

public multicast(subjectOrSubjectFactory: Function | Subject, selector: Function): Observable

返回的 Observable 發出對 ConnectableObservable 發出的項調用一個指定的 selector 函數的結果, ConnectableObservable 能夠在潛在的多個流之間共享單個 subscriptioncode

let a = Rx.Observable.from([{name: 'hi'},{name: 'ho'},{name: 'he'},{name: 'ha'}]);
    let b = a.multicast(() => new Rx.Subject());
    b.subscribe(i => console.log(i));
    b.subscribe(i => console.log(i));
    let c = b.connect();
    c.unsubscribe();
名稱 類型 屬性 描述
subjectOrSubjectFactory Function | Subject  

用來建立中間 Subject 的工廠函數,源序列的元素將經過 該 Subject 多播到 selector函數,或者將元素推入該 Subject htm

selector Function

可選的ip

可選的選擇器函數,能夠根據須要屢次使用以多播源流,而不會致使源流 生成多個 subscriptions 。給定源的訂閱者會從訂閱開始的一刻起,接收源的全部通知。get

multicasted.connect();io

connect() 方法十分重要,它決定了什麼時候啓動共享的 Observable 執行。由於 connect() 方法在底層執行了 source.subscribe(subject),因此它返回的是 Subscription,你能夠取消訂閱以取消共享的 Observable 執行。console

share

public share(): Observable<T>

返回: Observable<T> Observable,訂閱該 Observable 後向它的觀察者同時發送數據。

publish

public publish(selector: Function): *

返回 ConnectableObservable,它是 Observable 的變種,它會一直等待,直到 connnect 方法被調用纔會開始把值發送給那些訂閱它的觀察者

相關文章
相關標籤/搜索