首页 文章

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

提问于
浏览
0

所有

我一直在寻找问题的解决方案大约一个星期,找不到任何答案,所以希望有人在这里可以指出我做错了什么 . 我有一个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

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

    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;
     })
    }
    

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

相关问题