2016-07-26 4 views
1

別のサービスを使用してWebSocketに接続するAPIServiceがあります。 websocketサービスは、Subject<MessageEvent>のソケットを返します。次に私のAPIServiceでは、ペイロードに応じて、このSubjectを別の科目に吐きたいと思います。私APIServiceは次のようになります。代わりに私が使用することができますmapの別のオペレータはスプリット1データに応じて異なる科目に従う

export class APIService { 

    public sonos: Subject<sonosData>; 
    public commits: Subject<commitData>; 

    constructor(wsService: WebsocketService) { 
    this.sonos = <Subject<sonosData>>wsService 
     .connect(WEBSOCKET_URL) 
     .map((response: MessageEvent) => { 
     let data = JSON.parse(response.data); 
     if(data.sonos) { 
      return data.sonos; 
     } 
     }); 
    } 

} 

ありますか?私は、このためのいくつかのsudoのコードを記述する場合には、次のようになります。

export class APIService { 

    public sonos: Subject<sonosData>; 
    public commits: Subject<commitData>; 

    constructor(wsService: WebsocketService) { 
    wsService 
     .connect(WEBSOCKET_URL) 
     .forEach((response: MessageEvent) => { 
     let data = JSON.parse(response.data); 
     if(data.sonos) { 
      this.sonos = data.sonos; 
     } 
     if(data.commits) { 
      this.commits = data.commits; 
     } 
     }); 
    } 

} 

しかし、その後、パブリック変数は文句を言わないそれらを使用して、私のコンポーネントは、それらを購読することができないため、定義されたエラーを引き起こすこと。

答えて

1

あなたは空の科目を初期化し、他のコンポーネントは、このような被験者に加入得ることができる必要があります:

sonos = new Rx.Subject() 
commits = new Rx.Subject(); 

次に、あなたがデータを取り戻すとき、あなたはこの

wsService 
     .connect(WEBSOCKET_URL) 
     .forEach((response: MessageEvent) => { 
     let data = JSON.parse(response.data); 
     if(data.sonos) { 
     this.sonos.onNext(data.sonos); 
     } 
     if(data.commits) { 
      this.commits.onNext(data.commits); 
     } 
     }); 
ような何かを行うことができます
+0

ありがとう!それは働いた、onNextメソッドは私のために働かなかった。しかし、次に働く方法はおそらく同じ権利を働かせますか? – trevligheten

+0

うん。 Javascript実装を使用してコードスニペットを作成しました。おそらく、Typescriptは少し異なります。それがあなたのために働いた主なポイント。 –

関連する問題