在 observable 中使用 observable 的角度

阿尔朱汗

我正在制作一个 angular 6 的费用管理器 webapp。我的数据库在 firebase 上。我正在使用 angularfire2 库来检索和更新数据。

数据库设计如下

数据库设计

获取类别的函数是

getCategory(uid:String,categorykey:string):Observable<any> 
   {

return this.afdb.object(`users/${uid}/categories/${categorykey}`)
  .snapshotChanges()
  .pipe(map(c=>({key:c.payload.key,...c.payload.val()})));}

返回带有费用数组的 observable 的函数是

getExpensesWithKeys(uid:String):Observable<any>{
return this.afdb.list(users/${uid}/expenses)
.snapshotChanges()
.pipe(
  map(changes =>
  changes.map(c => 
({key:c.payload.key,...c.payload.val()}))
  )
);
 }

在我的组件中,我可以将我的费用作为

expenses:Expense[];
getExpensesWithKey("userid-123")
.subscribe(expenses=>this.expenses=expenses)

和任何类别作为

category:Category;
getCategory("userid-123",expenses[0].category)
.subscribe(category=>this.category=category);

我想创建一个 observable 来获取费用数组并返回每个费用的类别,我可以将其放入类别数组中。我一直在绞尽脑汁将这两个 observable 与各种 rxjs 操作符结合起来,但无济于事。

真的很感激一些帮助。

编辑:只是想添加一些我已经尝试过的方法。我试过的一种方法是

this.getExpensesWithKeys("user-123")
.pipe(mergeMap(expenses=>
expenses.map(expense=>
this.getCategory("user-123",expense.category)))).subscribe(console.log);

但它只是发出一个 Observable 数组。如何获取类别对象并将它们推送到数组中?

我试过的另一种方法

this.rtdbService.getExpensesWithKeys("user-123")
.pipe(map(expenses=>
   expenses.map(expense=>expense.category)))
   .pipe(mergeMap(ids=>
this.rtdbService.getCategory("user-123",ids)))
.subscribe(console.log);

这仅发出类别的键。

我也尝试了下面提供的答案,它没有发出任何东西。

提前致谢

阿尔朱汗

我终于找到了解决方案

  getExpensewithCategories(uid:String):Observable<any>{
    ;
    let expwithCat$=this.getExpenses(uid).pipe(mergeMap(expenses =>{
      return expenses.map(expense => this.getCategory(uid,expense.category)
      .pipe(map(cat=>
        ({expensekey:expense.key,
          amount:expense.amount,
          date:expense.date,
          expcatkey:expense.category,
          categorykey:cat.key,
          color:cat.color,
          name:cat.name})
        )
      ))
   }
    }));

      return expwithCat$.pipe(mergeAll())
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用RxJS Observable流JSON

来自分类Dev

无法将类型\'Observable <{}> \'分配为键入角度2

来自分类Dev

使用Observable设置CSS类

来自分类Dev

角度观众模拟Observable <string>

来自分类Dev

使用Observable作为数据源的角度拖放

来自分类Dev

以Observable(角度)形式返回对象

来自分类Dev

在ngIf中使用时,Observable不执行

来自分类Dev

角度检查模板中的observable是否为null

来自分类Dev

角度:不建议创建:改用new Observable()

来自分类Dev

使用Observable等待事件执行

来自分类Dev

如何使用Observable Java

来自分类Dev

角度2秒对Observable的请求

来自分类Dev

从角度 2 中的 observable 返回 observable

来自分类Dev

使用 Angular observable 和 http

来自分类Dev

使用 Rxjs 过滤 Observable

来自分类Dev

以角度将 Firebase observable 映射到模板

来自分类Dev

以角度 5 更新单个 Observable 中的多个值

来自分类Dev

Observable.map setTimeout 函数,返回类型为角度 5

来自分类Dev

在 Angular 中使用 Observer 作为 Observable

来自分类Dev

角度:错误 TS2322:类型 'Observable<{}>' 不可分配......使用 share() 运算符

来自分类Dev

使用 Observable 进行递归

来自分类Dev

如何清空角度为 4 的 observable

来自分类Dev

使用 retryWhen() 重试 observable

来自分类Dev

如何在角度 6 中将 any[] 转换为 observable<any[]>

来自分类Dev

在 Angular 6 中使用 Observable 的问题

来自分类Dev

从 Observable 的结果返回 Observable

来自分类Dev

.subscribe() 没有 observable 和 observable 在最新的角度有什么区别?

来自分类Dev

如何在带有打字稿的 Observable 中使用计时器调用 Observable?

来自分类Dev

使用 Observable 绑定 BehaviorRelay - RxSwift

Related 相关文章

热门标签

归档