AngularFire2 - 嵌套的FirebaseObjectObservable不会触发嵌套的Firebase调用 [英] AngularFire2 - nested FirebaseObjectObservable won't fire a nested Firebase call
问题描述
我有一个处理与Firebase中的多对多关系的问题。基本上,我试图从我的Firebase数据中的多个路径构建一个用户配置文件对象。我试过构建一个函数,返回一个observable,然后更新该observable中的数据,作为嵌套的observable从Firebase获取数据。
问题是嵌套的observable从我所知道的情况来看,它们从来没有被召唤过。我几个小时没有取得任何真正的成功,一直在殴打我的头。任何人都可以告诉我做错了什么?我感觉这是一个很常见的问题,得到解决。
public getUserProfile(data){
返回this._af.database.object(`/ social / users / $ {data.id}`).map((user)=> {
for(let user.videos中的vidKey){
//一旦代码到达这一行,就不会触发:(
this._af.database.object(`/ social / videos / $ {vidKey}`).map((video )=> {
user.videos [vidKey] = video;
});
}
返回用户;
});
}
嵌套的observable永远不会被调用,因为它永远不会被订阅 - 你可以做这样的事情,而不是:
public getUserProfile(data){
return this._af.database
.object(`/ social / users / $ {data.id}`)
//切换到加入可观察的
.switchMap((user)=> {
let vidKeys = Object.keys(user.videos);
//使用forkJoin加入视频观察对象。可观察到的
//需要完成,所以首先使用。并使用forkJoin的选择器
//将视频映射到用户,然后返回用户。
$ b $ return Observable.forkJoin(
vidKeys.map((vidKey)=> this._af.database
.object(`/ social / videos / $ {vidKey}` )
.first()
),
(... videos)=> {
vidKeys.forEach((vidKey,index)=> {user.videos [ vidKey] = videos [index]});
返回用户;
}
);
});
}
I've got a question about dealing with working with many-to-many relationships in Firebase. Basically, I'm trying to build a user profile object from multiple paths inside of my Firebase data. I've tried building a function that returns an observable and then updates the data in that observable as a nested observable grabs data from Firebase.
The problem is that the nested observable doesn't ever get called, from what I can tell. I've been beating my head against this for hours without any real success. Can anyone tell what I'm doing wrong? I feel this is a pretty common problem that gets solved.
public getUserProfile(data) {
return this._af.database.object(`/social/users/${data.id}`).map((user) => {
for ( let vidKey in user.videos) {
// Once the code hits this line, it never fires at all :(
this._af.database.object(`/social/videos/${vidKey}`).map((video) => {
user.videos[vidKey] = video;
});
}
return user;
});
}
The nested observable is never called because it's never subscribed to - observables are lazy.
You could do something like this, instead:
public getUserProfile(data) {
return this._af.database
.object(`/social/users/${data.id}`)
// Switch to the joined observable
.switchMap((user) => {
let vidKeys = Object.keys(user.videos);
// Use forkJoin to join the video observables. The observables will
// need to complete, so first is used. And use forkJoin's selector to
// map the videos to the user and then return the user.
return Observable.forkJoin(
vidKeys.map((vidKey) => this._af.database
.object(`/social/videos/${vidKey}`)
.first()
),
(...videos) => {
vidKeys.forEach((vidKey, index) => { user.videos[vidKey] = videos[index] });
return user;
}
);
});
}
这篇关于AngularFire2 - 嵌套的FirebaseObjectObservable不会触发嵌套的Firebase调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!