【发布时间】:2018-03-14 12:06:44
【问题描述】:
我有一个磁盘存储,它从磁盘返回一个Object?(可能已经保存或未保存)和一个 BehaviourSubject(此数据来自其他类调用,请检查下面的代码):
代码是:
private val subject: Subject<Optional<Element>> = BehaviorSubject.create()
fun getElements(): Observable<List<Element>> =
Observable.concat(Observable.just(storage.getElement()), subject)
.filter({ it.isPresent })
.take(1)
.flatMapSingle {
Observable.just(it.get())
.flatMapIterable { it.categories }
.toList()
}
fun updateSubject(response: Response) {
storage.save(response.element) //Save element in storage
subject.onNext(response.element.toOptional())
}
我的问题是,我在其他课上
getElements().subscribe(onElements(), onError());
第一次,当存储为空时,它什么也不做,即使我在subject.onNext(response.element.toOptional()) 中有一个断点,希望onNext 会触发getElements 的流,但没有任何反应。
第二次,当我已经将接收到的元素保存在存储中时(所以,storage.getElement() 返回了一些东西)它工作正常。
我的功能描述是:
从缓存和主题中获取元素,先到达,然后返回(第一次将是谁来的主题),下一次,我希望第一个是存储的。
【问题讨论】:
-
你能解释一下“第一次”和“下一次”是什么意思吗?你的意思是你有两个订阅者? (一个在调用 updateSubject 之前订阅,一个在之后订阅?)
标签: kotlin rx-java2 behaviorsubject