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

时间:2018-04-09 15:09:58

标签: angular firebase angularfire2

所有

我一直在寻找问题的解决方案大约一个星期而且找不到任何答案,所以希望有人可以指出我做错了什么。我有一个FirebaseList observable,我使用Firebase,它使用.where()在第一个实例中过滤为搜索功能。

一旦完成,我试图使用If语句来确定结果是否仍然有效(因为Firebase无法执行所有搜索功能),然后如果结果仍然有效,则插入另一个包含用户信息的对象(另一个Observable) )。

我尝试过使用subscribe / 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性质。

任何建议都赞赏!

1 个答案:

答案 0 :(得分:0)

我回到了之前的设置并出于某种原因工作了。它涉及在有效载荷之后映射结果并推入阵列。例如

>>> get_next('dog')
'lion'

希望这可以帮助处于相同情况的任何人。请注意上面订阅了这里的其他变量,但如果有更好的选择,我会在以后重新访问,我还在学习