Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 平坦可观察<;可观察<;对象[]>&燃气轮机;_Asynchronous_Firebase_Rxjs_Angularfire2_Angular2 Observables - Fatal编程技术网

Asynchronous 平坦可观察<;可观察<;对象[]>&燃气轮机;

Asynchronous 平坦可观察<;可观察<;对象[]>&燃气轮机;,asynchronous,firebase,rxjs,angularfire2,angular2-observables,Asynchronous,Firebase,Rxjs,Angularfire2,Angular2 Observables,我正在尝试在Firebase中创建一个连接 因此,我异步地从数据库中获取id数组,然后为每个id异步加载实际对象。函数应该返回可观察的 因此,对于第一个异步请求,我将获得可观察的(字符串是id)。 所以,无论我在这里尝试了什么,我要么可以观察到,要么得到一些我不想得到的东西 守则: getUserFavorites(userId=”“):可观察{ 返回此.af.database.list('/ranks_by_user/likes/'+userId{ 查询:{ orderByKey:是的, 限制

我正在尝试在Firebase中创建一个连接

因此,我异步地从数据库中获取id数组,然后为每个id异步加载实际对象。函数应该返回可观察的

因此,对于第一个异步请求,我将获得可观察的(字符串是id)。 所以,无论我在这里尝试了什么,我要么可以观察到,要么得到一些我不想得到的东西

守则:

getUserFavorites(userId=”“):可观察{
返回此.af.database.list('/ranks_by_user/likes/'+userId{
查询:{
orderByKey:是的,
限制第一次:50
}
}).flatMap((喜欢:any[])=>{
返回like.map(like=>{
返回此.af.database.object(“/引文/”+like.$key)
});
});
}
错误是:

类型“Observable”不可分配给类型“Observable”。


您可以使用
forkJoin
获取引用数组。请注意,
first
运算符用于从
对象
可观察对象获取当前值,因为
forkJoin
需要可观察对象完成以下操作:

从“rxjs/Observable”导入{Observable};
导入“rxjs/add/observable/forkJoin”;
导入“rxjs/add/operator/first”;
导入“rxjs/add/operator/switchMap”;
getUserFavorities(userId):可观察{
返回此.af.database.list('/ranks_by_user/likes/'+userId{
查询:{
orderByKey:是的,
限制第一次:50
}
})
.switchMap((likes:any[])=>Observable.forkJoin(
likes.map(like=>this.af.database.object(“/citations/”+like.key).first())
));
}
forkJoin
获取一个可观察对象数组并返回一个可观察对象,该可观察对象将发出一个可观察对象最终值数组

如果要返回
引文
实例,则需要创建它们(大概是使用数据库中的值)。您可以使用
map
操作符执行以下操作:

导入“rxjs/add/operator/map”;
...
likes.map(like=>this.af.database.object(“/citations/”+like.$key).first().map(value=>new-Citation(value)))
...

您可以使用
forkJoin
获取引用数组。请注意,
first
运算符用于从
对象
可观察对象获取当前值,因为
forkJoin
需要可观察对象完成以下操作:

从“rxjs/Observable”导入{Observable};
导入“rxjs/add/observable/forkJoin”;
导入“rxjs/add/operator/first”;
导入“rxjs/add/operator/switchMap”;
getUserFavorities(userId):可观察{
返回此.af.database.list('/ranks_by_user/likes/'+userId{
查询:{
orderByKey:是的,
限制第一次:50
}
})
.switchMap((likes:any[])=>Observable.forkJoin(
likes.map(like=>this.af.database.object(“/citations/”+like.key).first())
));
}
forkJoin
获取一个可观察对象数组并返回一个可观察对象,该可观察对象将发出一个可观察对象最终值数组

如果要返回
引文
实例,则需要创建它们(大概是使用数据库中的值)。您可以使用
map
操作符执行以下操作:

导入“rxjs/add/operator/map”;
...
likes.map(like=>this.af.database.object(“/citations/”+like.$key).first().map(value=>new-Citation(value)))
...

你能在问题中包含你的代码吗?用代码更新你需要包含
引文的代码。是接口还是类?如果它是一个类,至少你需要指出构造函数采用的参数。它是一个类。但这里并没有具体的课程。它很可能是“任意”类型。我只是按原样粘贴了代码。已更新。您可以在问题中包含代码吗?已使用代码更新您需要包含
引文的代码。是接口还是类?如果它是一个类,至少你需要指出构造函数采用的参数。它是一个类。但这里并没有具体的课程。它很可能是“任意”类型。我只是按原样粘贴了代码。更新。完美!非常感谢。像预期的那样完美!非常感谢。工作如期进行