我从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如何返回?
答案 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)
}
}
}
取决于此代码的位置,请注意保留循环。