[英]Using conditional statements with Angularfire and rxjs Observable operators
所有
我一直在寻找解决问题的方法大约一个星期,并且找不到任何答案,因此希望这里的人可以指出我做错了什么。 我有一个与Firebase一起使用的可观察到的FirebaseList,它在第一个实例中使用.where()筛选为搜索功能。
完成此操作后,我将尝试使用If语句确定结果是否仍然有效(因为Firebase无法执行所有搜索功能),然后如果结果仍然有效,请插入另一个包含用户信息的对象(另一个可观察到的对象)。
我尝试结合使用subscription / map / flatMap和switchMap,但是不能仅返回Observable流。 结果要么作为多个数组返回,要么在流中返回“ undefined”,要么返回其他不期望的结果。
我不确定如何与Plunker一起使用,因此复制了以下代码。 我还需要返回带有键的对象,因此需要执行额外的有效负载步骤。
return ths.afs.collection('results', ref=> ref.where('location', '==',
searchLocation.where('date', '==', searchDate)
.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.dat();
const key = a.payload.doc.key;
return{ key, ...data};
}).map(trueResults => {
if (!trueResults.removedid.includeds(firebaseUser.uid || trueResults.status === 'available'){
this.userService.getUserObj(trueResults.ownerId).subscribe(userObj => {
trueResults.userOwnerObj = userObj;
});
}
return trueResults
}
我在组件中订阅结果以显示在搜索页面上。
我也尝试过将trueResult推送到数组上,但担心会破坏此函数的Observable性质。
任何建议表示赞赏!
我回到了较早的设置,由于某种原因,它起作用了。 它涉及将结果映射到有效负载之后并推入数组。 例如
return ths.afs.collection('results', ref=> ref.where('location', '==',
searchLocation.where('date', '==', searchDate)
.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.dat();
const key = a.payload.doc.key;
return{ key, ...data};
});
}).map(trueResults => {
trueResults.forEach(trueResult => {
if (!trueResult.removedid.includeds(firebaseUser.uid || trueResult.status
=== 'available'){
this.userService.getUserObj(trueResults.ownerId).subscribe(userObj => {
trueResult.userOwnerObj = userObj;
arrayOfTrueResults.push(trueResult)
});
})
return arrayOfTrueResults;
})
}
希望这可以帮助处于相同情况的任何人。 请注意,上面确实订阅了其中的另一个变量,但是如果有更好的选择,以后会再访问,我仍在学习
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.