我使用承诺或可观察的方式学习编程和异步,并且有点难以理解 我有2个数据源,帖子(用户ID发布了它)和用户,我想要实现的只是显示帖子与一些用户信息,如图像,名称等,我该怎么办?
这就是我获取资料的方式:
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)
})
})
}
发布帖子
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
}
当用户发布内容时,是否需要添加图像和名称等用户数据,或者是否可以这样做。
答案 0 :(得分: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;
}