在RXSwift中返回BehaviourSubject

时间:2019-09-24 08:58:34

标签: rx-swift

我从NodeJS实例中获得了一个带有签名的HTML页面:

public func requestHTMLPage(_ page: String) -> Observable<String?> 

但是我有一些缓存的HTML页面,所以想返回它们。

我想返回我的缓存页面

if let cachedPage = cachedPage {
    return BehaviorSubject<String?>(value: data)
}

但不幸的是,它没有告诉我的订户返回了数据。

我使用了以下糟糕的解决方案:

if let cachedPage = cachedPage {
    observer.onNext(data)
    return BehaviorSubject<String?>(value: data)
}

我想告诉观察者我们有数据,但是我也想返回到执行路径的尽头。

在我设置了observer.onNext之后,如何返回并赋予类型为Observable?或者仅使用observer.onNext如何返回?

1 个答案:

答案 0 :(得分:1)

我不确定您为什么在这里尝试使用主题,您可能只需要简单地使用Observable.create

public func requestHTMLPage(_ page: String) -> Observable<String?> {
  return Observable.create { observer in
    if cachedPage = self.cache[page] {
      observer.onNext(cachedPage)
      observer.onCompleted()
      return Disposables.create()
    } else {
      /* whatever you use to fetch the data in a reactive way */
      return self.service.rx.request(page).subscribe(observer)
    }
  }
}

取决于此代码的位置,请注意保留循环。