[英]forkJoined observables not rendering output in the component
All of my posts data is located at /posts
我所有的帖子数据都位于
/posts
When uploading new posts - postId's are also saved in /people/${userId}/posts
上传新帖子时-postId也会保存在
/people/${userId}/posts
Have a getFeed(uri, fetchPostDetails = false)
有一个
getFeed(uri, fetchPostDetails = false)
When getting All Posts feed (general feed page) it uses uri posts
& false for the fetchPostDetails and retrieves bc all of the post data is there. 获取“所有帖子”供稿(常规供稿页面)时,它将uri
posts
和false用作fetchPostDetails,并在其中检索所有的帖子数据。
Problem When retrieving user posts and post data it will go to get user's postsId's and then get that post data individually. 问题检索用户帖子和帖子数据时,它将获取用户的postsId,然后分别获取该帖子数据。 So it creates multiple observables's and returns a forkJoined Observable to render in the Component.
因此,它将创建多个可观察对象,并返回forkJoined Observable以便在Component中进行渲染。 Can't get it to render.
无法渲染。
// located angularFireHelper service
getUserFeed(uri, fetchPostDetails = true) {
let query = null;
query = this.database.list(`/${uri}`,
{
query: {
orderByKey: true,
}
});
// IF not general feed fetchPostDetails
if (fetchPostDetails) {
return query.map((posts) => {
console.log('User page so fetchPostDetails called');
let source = [];
source = posts.map(post => {
// returns an Observable
return this.database.object(`/posts/${post.$key}`);
});
return Observable.forkJoin(source);
});
}
// userFeed.component.ts
ngOnInit() {
this.componentName = 'user page component';
this.user = this.afAuth.authState;
this.getUsersFeedPosts();
}
getUsersFeedPosts() {
this.user.subscribe(
(value) => {
console.log('value', value.uid);
this.currentUser = value;
this.afHelperService.getUserFeed(`people/${this.currentUser.uid/posts`).subscribe(
(posts) => {
console.log('posts', posts);
this.userPosts = posts;
});
}
// userFeed.component.html
{{ userPosts | json }}
// In the console for posts (userPosts) it shows
posts ForkJoinObservable {_isScalar: false, sources: Array(4), resultSelector: null}
enter code here
sources: (4) [FirebaseObjectObservable, FirebaseObjectObservable, FirebaseObjectObservable, FirebaseObjectObservable]
UPDATE Changing the angularFireHelperService code to the following worked. 更新将angularFireHelperService代码更改为以下工作。 Not 100% sure why this is the only way I could get it to work.
并非100%知道为什么这是我可以使其正常工作的唯一方法。 Seems like an antipattern using zip operator.
好像是使用zip运算符的反模式。
if (fetchPostDetails) {
return query.switchMap((posts) => {
console.log('User page so fetchPostDetails called');
let source = [];
source = posts.map(post => {
// returns an Observable
return this.database.object(`/posts/${post.$key}`);
});
return Observable.zip(...source);
});
You sould extend your stream using switchMap. 您可以使用switchMap扩展流。 Change to
query.switchMap
更改为
query.switchMap
if (fetchPostDetails) {
return query.switchMap((posts) => {
console.log('User page so fetchPostDetails called');
let source = [];
source = posts.map(post => {
// returns an Observable
return this.database.object(`/posts/${post.$key}`);
});
return Observable.forkJoin(source);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.