2017-01-14 6 views
1

Ich habe eine Observable, die auf dem Tisch wählen Ereignis zu hören, es ist auch heiß.Warum heiß beobachtbare wieder zu abonnieren

Der Code-Schnipsel:

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

Wie Sie sehen können, gibt es zwei Teilnehmern, die auf der Veranstaltung zu hören. Also sollte das Ergebnis für alle Abonnenten freigeben, dass das ein sogenannter Replay-Effekt ist.

Die Ausgabe, die ich habe ist: enter image description here

Aber ich erwarte nur einmal resubscribe ausgegeben. Was mache ich falsch?

Antwort

1

Während Ihre oTableRowSelect$ könnte heiß und geteilt werden, es ist nur die den Teil geteilt, wo Sie es irgendwie mit zusätzlichem Operator (n) (in Ihrem Fall do und map) erstrecken.

In RxJS wird jede Erweiterung durch einen Operator grundsätzlich einen "neuen" Stream zurückgeben. Um dies "neuen" Strom heiß zu machen/shared Sie einen Operator anwenden müsste, dass es heiß macht (share, publish, publishReplay, ect ...)

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

In Bezug auf heiße beobachtbare ich verstehe, zum Beispiel ein Knopf Klick Ereignis ist eine heiße beobachtbar. Wenn ich mehrere Abonnenten habe, erwarte ich, dass sie die Nachricht gleichzeitig erhalten. –

+0

Richtig, sie erhalten die Nachricht zur _ "gleichen Zeit" _ (ein paar Nanosekunden Abstand wahrscheinlich ;-)) – olsn

+0

vielen Dank. –

Verwandte Themen