2016-11-02 3 views
0

ich eine websocket in einem RxJS beobachtbar wie so bin Verpackung:RxJs Obesrver um websocket nur Feuer auf einen Teilnehmer gewickelt

this.wsObserver = Observable.create(observer=>{ 
      this.websocket.onmessage = (evt) => { 
       console.info("ws.onmessage: " + evt); 
       observer.next(evt); 
      }; 
     }); 

Dies funktioniert, aber wenn ich mehrere Teilnehmer hinzufügen, nur ein Feuer (die letzte hinzugefügt):

this.wsObserver.subscribe((result) => { 
     console.info("! result: " + result); 
     }); 
     this.wsObserver.subscribe((result) => { 
     console.info("!2 result: " + result); 
     }); 

Nur !2 result: tritt auf.

Warum? Was mache ich falsch?

Antwort

2

Das Problem besteht darin, dass Sie den Handler onmessage in Ihrem Erstellungshandler überschreiben, so dass nur der letzte Teilnehmer (der als letzter den Wert onmessage setzt) ​​aufgerufen wird.

Was könnten Sie tun, ist:

var var messageSubject = new Subject(); 
this.websocket.onmessage = (evt => messageSubject.next(evt)); 

und dann

messageSubject.subscribe(...) 

wird für so viele Teilnehmer arbeiten, wie Sie

+0

Interessante wollen, hat es das Problem beheben. Aber warum? Wird der Observer.create-Aufruf nicht im ursprünglichen Code nur einmal aufgerufen und dann zweimal abonniert? – mtyson

+0

Die create-Funktion ruft eine Handler-Funktion ab, die für jeden neuen Abonnenten aufgerufen wird. – Meir

+0

Danke - das ist auch hilfreich für die Zukunft! – mtyson

Verwandte Themen