繁体   English   中英

在Angularfire和rxjs Observable运算符中使用条件语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM