繁体   English   中英

如何在 RxJS 中创建一个依赖于另一个 Observable 的 Observable

[英]How to create an Observable that depends on another Observable in RxJS

我有一个购物车服务,它提供有关购物车的反应性数据:

export interface OrderItem {
  product: IProduct
  quantity: number
}

private subject = new BehaviorSubject<OrderItem[]>([])
private orderItems: Observable<OrderItem[]> = this.subject.asObservable()

getItems(): Observable<OrderItem[]> {
    return this.orderItems
  }

我想创建一个方法,该方法将返回购物车中产品数量的Observable ,如下所示(伪代码):

return getItems().subscribe(items => {
  let cartSize = 0
  items.forEach(item => cartSize += item.quantity)
})

所以基本上将cartSize作为可观察返回,我该怎么做?

这不是一个依赖于另一个 observable 的 observable(这将调用诸如 mergeMap、switchMap 和 withLatestFrom 之类的运算符),但它只是对 observable 的转换。 这将是 map。

例如:

const totalQuantity$ = getItems().pipe(
  map(items => {
    // this would be nicer using a reduce but ok
    let cartSize = 0
    items.forEach(item => cartSize += item.quantity)
    return cartSize
   })
 )

然后在某处订阅 totalQuantity$。

不相关,但您可以删除此orderItems属性,并将getItems方法重构为:

getItems(): Observable<OrderItem[]> {
  return this.subject.asObservable()
}

无论如何,如果您在此方法中使用一些 pipe 运算符,那么您可以简单地处理this.subject ,因为所有管道都返回Observable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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