0

Firebase를 사용하여 내 Angular 2 앱에 대한 의견 섹션을 만들고 있습니다. 주어진 토론에 대한 설명 목록을 포함하는 /request_discussions 트리 테이블에서 데이터를 가져옵니다. 내가하려는 것은 각 토론 항목을 거치고 /users 트리 테이블에서 작성자 정보를 수집하고 함께 모아 하나의 큰 "토론"배열로 만듭니다. 나는 개체의 모양 싶습니다Firebase AngularFire Observables - 토론 목록 반복, 작성자 ID를 기반으로 사용자 데이터 수집 및 집계 데이터 반환

/request_discussions/<discussionID>

{ 
    messageId1: { 
    body: "Hello world", 
    created_date: "2017-03-23T01:11:25.767Z", 
    author_id: "authorId1" 
    } 
} 

:

여기
{ 
    messageId1: { 
    body: "Hello world", 
    created_date: "2017-03-23T01:11:25.767Z", 
    author_id: "authorId1", 
    author: { 
     $key: "authorId1", 
     first_name: "Andrew", 
     last_name: "Fussinger" 
     ...<and all the other data>... 
    } 
    } 
} 

이 관찰 가능한을 받고에서 내 시도가 행동하는 것입니다, 같은

토론 객체 보인다 하지만 이것은 내가 찾고있는 곳 근처에 있지 않은 객체의 배열을 반환합니다.

getCheckRequestDiscussion(checkRequestId) { 

    // Get request ID 
    return this._af.database.list(`/request_discussions/${checkRequestId}`) 
     .switchMap(messages => { 

      return Observable.combineLatest(
      messages.map(message => { 
       return this._af.database.list(`/users/${message.author_id}`) 
      }), 
      (...users) => { 
       console.log('users?', users) 
       return messages; 
      } 
     ) 
     }) 
    } 

내가 여기에 무엇을 함께 병합 할 수 있는지 알고 있습니까?

답변

1

Woops이므로 combineLatest obsevable 내부에서 .list을 사용하고 있습니다. .object해야합니다. 업데이트 된 코드는 다음과 같습니다.

getCheckRequestDiscussion(checkRequestId) { 

    // Get request ID 
    return this._af.database.list(`/request_discussions/${checkRequestId}`) 
     .switchMap(messages => { 

      return Observable.combineLatest(
      messages.map(message => { 
       return this._af.database.object(`/users/${message.author_id}`) 
      }), 
      (...users) => { 
       messages.forEach((message, index) => { 
       users.forEach(user => { 
        if(message.author_id === user.$key) { 
        messages[index]['author'] = user; 
        } 
       }) 
       }) 
       return messages; 
      } 
     ) 
     }) 
    }