2016-03-27 37 views
0

私は約束または観測可能性を使用してプログラミングと非同期を学習しており、理解するのが少し難しいです 2つのデータソース、投稿(ユーザーIDを投稿したユーザー)、およびユーザーが、達成するには、単純に、画像、名前などのような一部のユーザー情報を含む投稿を表示することです。どのように進めるのですか?2つのソースからデータを取得

これは私が私のソースを取得する方法である:投稿

allPosts(): Subject<Post[]> { 
const postsObservable = new BehaviorSubject<Post[]>(null) 

this.rootRef.child('posts').on('value', snapshot => { 
    const data = snapshot.val() 
    const posts = Object.keys(data) 
    .map(id => new Post(id, data[id])) 
    .sort((lhs, rhs) => rhs.date.getTime() - lhs.date.getTime()) 

    postsObservable.next(posts) 
}) 

return postsObservable 

}

ため

allUsers() { 
    return new Promise((resolve, reject) => { 
     this.rootRef.child('users').once('value', snapshot => { 
     const data = snapshot.val() 
     const users = Object.keys(data).map(id => new User(id, data[id])) 
     resolve(users) 
     }) 
    }) 
    } 

私はときに、ユーザーのポストに何か画像と名前のように、ユーザーデータを追加する必要がありますか、それをこのようにすることは可能ですか?

+0

データを結合するために 'combineLatest'zip'または' withLatestFrom'のようなsmthを使うことができます。 – xgrommx

答えて

1

投稿を受け取ったときにgetUsersメソッドを呼び出します。このようにして、両方のデータが得られます。あなたは投稿にユーザーのヒントを設定した後に次のメソッドを呼び出すでしょう:

allPosts(): Subject<Post[]> { 
    const postsObservable = new BehaviorSubject<Post[]>(null) 

    this.rootRef.child('posts').on('value', snapshot => { 
    const data = snapshot.val() 
    const posts = Object.keys(data) 
     .map(id => new Post(id, data[id])) 
     .sort((lhs, rhs) => rhs.date.getTime() - lhs.date.getTime()) 

    this.getUsers().then(users) => { 
     posts.forEach((post) => { 
     // Set user hints into posts 
     }); 
     postsObservable.next(posts); 
    }); 
    }); 

    return postsObservable; 
} 
+0

それ以外の場合は、あなたの解決策と一緒に仕事を得る、別の解決策data.val()と等しいuserRef orderbykeyを使用して私の投稿機能では、ユーザーがうまく動作するようだ – basharkn

関連する問題