2017-05-09 1 views
0

나는 모든 관찰 대상을 병합하여 동시에 chat 객체를 받기 위해 잠깐 쓴 코드를 리펙토링하려고합니다. 각도와 이온 및 파이어베이스를 사용하고 있습니다.Observable 내에서 일련의 observables를 병합하는 방법

this.userAsync = this.chatsProvider.getMyUserChatsGrpID().mergeMap(grpIDs=> { 
    if (grpIDs.length > 0) { 

    return Observable.combineLatest(
     grpIDs.map((grpID) => this.chatsProvider.getGroupObjectAsync(grpID.$key).map(grpObject => { 
      grpObject.object = grpObject; 
      grpObject.memberProfiles = this.chatsProvider.getMemberProfiles(Object.keys(grpObject.members)) 
      grpObject.latestMessage = this.chatsProvider.getLatestConversation(grpID.$key, grpObject.lastChecked) 
      grpObject.unreadMessages = this.chatsProvider.getUnreadMessageCount(grpID.$key, this.profileService.getUIDString()) 
     return grpObject 
     })), 
    ) 
    } else { 
    return Observable.of([]) 
    } 

현재 이러한 코드는 역시 grpObject.memberprofiles가 .lastestMessage가 .unreadMessages 난 후 비동기 파이프를 이용하여 푸는이 관찰 가능한로 반환 요구 객체를 반환한다. 하나를 관찰 할 수있는 항목으로 되돌리려면 모든 것을 변환 할 수있는 방법이 있습니까?

답변

0

toArray() 연산자를 사용하십시오. 난 당신이 모든 그룹 데이터 (memberProfiles 등) 풀어로 즉, 제대로 달성하기 위해 그룹의 관찰을 원하는 무엇을 이해 한 경우 http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-toArray

let obs1$= Rx.Observable.of(1,2,3); 
let obs2$= Rx.Observable.of('A','B','C'); 

obs2$.concat(obs1$).toArray().subscribe(x=>console.log(x)) 
+0

하지만 여전히 내 grpID가 필요합니다. 나머지 키는 관찰 가능합니다 –

0

, 난 당신이 다음 세 가지를 넣어 다른 combineLatest에 추가 할 필요가 있다고 생각 거기 관찰 할 수 있습니다.

는 그래서 grpIDs.map 루프 안에 당신은 내가 개체 속성을 변경 한이

return this.chatsProvider.getGroupObjectAsync(grpID.$key).combineLatest(
    this.chatsProvider.getMemberProfiles(Object.keys(grpObject.members)), 
    this.chatsProvider.getLatestConversation(grpID.$key, grpObject.lastChecked), 
    this.chatsProvider.getUnreadMessageCount(grpID.$key, this.profileService.getUIDString()), 
    /* Function which gets passed all the latest observable values for you to merge together*/ 
    (group, members, latestConversation, unreadMessageCount) => { 
    return { group, members, latestConversation, unreadMessageCount }; 
    } 
) 

참고 싶어.

도움이 되길 바랍니다.

관련 문제