是否可以从一个订阅中获取两个值?第一个是所有概要文件数据,第二个只是按名称过滤的收藏夹数据。 我想使用最少数量的Firebase请求。
数据库结构:
profile{
uid{
name,
age,
favorite{
name,
uid,
}
}
}
这是组件代码:
ngOnInit() {
this.db.getDataObj("/Profile/" + this.uid).subscribe(res =>{
console.log("Profile Result");
console.log(res);
});
this.db.getDataObj("/Profile/" + this.uid/favorite).subscribe(res =>{
console.log("Profile Result");
console.log(res);
});
这是服务代码:
getDataObj(objpath:string){
this.objRef = this.db.object(objpath);
this.obj = this.objRef.valueChanges();
return this.obj;
}
答案 0 :(得分:0)
那是不可能的。 一个请求将始终返回一个响应。
但是,查看您的数据库结构,您只需要一个请求即可。
this.db.getDataObj("/Profile/" + this.uid).subscribe(res =>{
console.log("Profile Result");
console.log(res);
});
此处的“ res”应包含完整的配置文件对象(包括“收藏夹”对象)。
如果您仍然想使此代码更短/更干净,可以考虑创建一个可观察到的“ zip”。更多信息here。
答案 1 :(得分:0)
如果我的理解正确,那么请创建以下界面:
interface Profile{
uid:uid;
}
interface uid{
name:string;
age:number;
favourite:favourite;
}
interface favourite{
name:string;
uid:string;
}
,然后在您的服务中使用以下内容:
getDataObj(objpath:string):Observable<Profile>{
return this.http.get<Profile>(objpath);
}
,然后读取喜欢的值,例如:
this.db.getDataObj("/Profile/" + this.uid).subscribe(res<Profile> =>{
console.log("Profile Result");
console.log(res.uid.favourite);
});
如果可能,请尝试使用该uid的配置文件获取与uid收藏夹相关的数据,这样,您将只有一个服务调用来获取所有数据。如果此调用不占用大量数据,我认为这是可行的方法。否则,从长远的角度来看,如果您应该在Profile Service http调用中接收的数据量应该增加,那么可以使用单独的http调用来获取一个uid的配置文件和收藏夹数据。
这是我第一次在此论坛上回答问题,请随时向我提供有关我的回答的反馈。