2017-01-14 22 views
1

私はテーブル選択イベントでリッスンする観測可能な、それはまた暑いです。なぜ熱い観測可能なresubscribe

コードスニペット:

const oTableRowSelect$ = TableOb.rowSelectionChangeEvent$(this.getById("ins-table")); 
    const test = oTableRowSelect$ 
    .do(function() { 
     console.log("resubscribe"); 
    }) 
    .map(function() { 
     return 4; 
    }); 

    test.subscribe(function (o) { 
    console.log("Select1" + o); 
    }); 

    test.subscribe(function (o) { 
    console.log("Select2" + o) 
    }); 

あなたが見ることができるように、イベントをリッスン2人の加入者があります。したがって、結果はすべての加入者、すなわちリプレイ効果と呼ばれるものに共有されるべきです。

私が持っていること出力は、次のとおりです。 enter image description here

しかし、私は一度だけresubscribe出力を期待しています。私は間違って何をしていますか?あなたのoTableRowSelect$ホットと共有かもしれませんが

答えて

1

、それはあなたが(あなたのケースdomapに)追加演算子(S)で何とかそれを拡張部分を共有しています。

RxJSでは、オペレータによる任意の拡張は、基本的に「新しい」ストリームを返します。この"新しい"ストリームがホットにするために /あなたはそれ熱い(sharepublishpublishReplay、電気ショック療法...)

const hotBaseStream$ = new Rx.BehaviorSubject("Hi!"); 
 

 
const test = hotBaseStream$ 
 
    // -------- below this line you get a "new" stream, that is not hot any more 
 
    .do(() => console.log("resubscribe")) 
 
    .map(() => 4) 
 
    .publishReplay().refCount(); // remove this part and you will have back your original behavior 
 

 
    test.subscribe(function (o) { 
 
    console.log("Select1 ", o); 
 
    }); 
 

 
    test.subscribe(function (o) { 
 
    console.log("Select2 ", o) 
 
    });
<script src="https://unpkg.com/@reactivex/rxjs/dist/global/Rx.js"></script>

を作る演算子を適用する必要があると思います共有
+0

熱い観測の期間、私は理解しています。例えば、ボタンのクリックイベントは注目に値するイベントです。私は複数の加入者がいるとき、私は同時に彼らがメッセージを受け取ることを期待します。 –

+0

正解、彼らは_ "同じ時刻" _(おそらく数ナノ秒離れて;-)でメッセージを受け取ります – olsn

+0

ありがとうございます。 –

関連する問題