订阅 behviorSubject 中的 observable:出现错误

Posted

技术标签:

【中文标题】订阅 behviorSubject 中的 observable:出现错误【英文标题】:subscribing to an observable inside a behviorSubject: getting error 【发布时间】:2021-05-29 16:17:25 【问题描述】:

我正在尝试订阅 BehaviorSubject,然后订阅取决于条件的可观察对象

BehaviorSubject 是:

orderListSubject= new BehaviorSubject<any>(orderListTouched: false, orderList: []);

myAllOrders = new BehaviorSubject<OrderModel[]>([])

我有一个服务试图检查 orderListTouched 是否为假,我需要订阅另一个 observable 以将值推送到 orderList

orderListTouched 为 false 时调用的函数:

getMyOrderList()

this.courseService.getMyOrderList(this.user.uid).snapshotChanges().pipe(first())


这里是我试图用来包装这个案例的函数:

listenToOrderList()
    this.courseService.orderListSubject.pipe(map(ev =>

      return ev.orderListTouched;


    ), switchMap((res)=>
if(res === false)
return this.getMyOrderList()
if(res === true)
return this.myAllOrders

      
        
      
      

    ))

  

当我这样做时,我收到一个错误:“(res:any)=> void”类型的参数不可分配给“(value:any,index:number)=> ObservableInput”类型的参数。 类型“void”不可分配给类型“ObservableInput”。

请指教!

【问题讨论】:

getMyOrderList() 不返回任何内容。添加return 语句。 【参考方案1】:

getMyOrderList 缺少 return 语句,因此抱怨类型“void”。

getMyOrderList()
  return this.courseService.getMyOrderList(this.user.uid).snapshotChanges().pipe(first());

【讨论】:

以上是关于订阅 behviorSubject 中的 observable:出现错误的主要内容,如果未能解决你的问题,请参考以下文章

Java二十三设计模式之------观察者模式

设计模式---观察者模式

iOS 11. KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_

iOS 11. KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_

ForEach 中的 SwiftUI 索引超出范围

EventBus事件通信框架 ( 订阅方法注册 | 检查订阅方法缓存 | 反射获取订阅类中的订阅方法 )