2017-02-09 74 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例子,就像一个魅力。谢谢 –