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