gpt4 book ai didi

AngularFire2 - 嵌套的 FirebaseObjectObservable 不会触发嵌套的 Firebase 调用

转载 作者:行者123 更新时间:2023-12-02 09:22:50 24 4
gpt4 key购买 nike

我有一个关于在 Firebase 中处理多对多关系的问题。基本上,我正在尝试从 Firebase 数据内部的多个路径构建用户配置文件对象。我尝试构建一个返回可观察值的函数,然后在嵌套可观察值从 Firebase 获取数据时更新该可观察值中的数据。

据我所知,问题是嵌套的可观察对象永远不会被调用。我已经为此绞尽脑汁好几个小时了,但没有取得任何真正的成功。谁能告诉我我做错了什么?我觉得这是一个很常见的问题,已经解决了。

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;
});
}

最佳答案

嵌套的可观察量永远不会被调用,因为它永远不会被订阅 - 可观察量是惰性的。

你可以这样做:

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 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40597665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com