2017-02-09 71 views
1

我通過這一格式的WebSocket連接接收消息:RxJS 5 WebSocket的陣列信息

[ 
     { 
     //msg 1 
     }, 
     { 
     //msg 2 
     }, 
     .... 
    ] 

基於一些例子我在這裏發現在網絡上是我的代碼:

public messages: Subject<Message> = new Subject<Message>(); 
//... 
     this.messages = <Subject<Message>>this.wsService 
      .connect(COMMUNICATION_URL) 
      .map((response: MessageEvent): Message => { 
       let data = JSON.parse(response.data); 
       //data is an array [ {..} , {..}, ...] 
       return data; 
      }); 


     this.messages.subscribe(msg => { 
      console.log(msg); 
      // msg is an array of objects [ {..} , {..}, ...] 
      // I want to be just the object 
     }); 

我想要實現的是拆分對象中的消息(數組),當我訂閱我想接收這些對象而不是對象數組。

回答

1

最容易的就是使用concatAll()mergeAll(),當它與RxJS 5中的數組一起使用時,會重新發送它的所有項目。

this.messages = <Subject<Message>>this.wsService 
    .connect(COMMUNICATION_URL) 
    .map((response: MessageEvent): Message => { 
     let data = JSON.parse(response.data); 
     //data is an array [ {..} , {..}, ...] 
     return data; 
    }) 
    .concatAll(); 

我沒有測試,但我想你也可以使用更短的變體:

this.messages = <Subject<Message>>this.wsService 
    .connect(COMMUNICATION_URL) 
    .concatMap((response: MessageEvent): Message => { 
     let data = JSON.parse(response.data); 
     //data is an array [ {..} , {..}, ...] 
     return data; 
    }) 

查看類似的答案:

+0

我測試過的concatMap例子,就像一個魅力。謝謝 –