挑战:我希望有一个存储库来生成查询(Query<T>
),调用者可以为其指定调度程序,并以任何它想要的方式进行操作,这反过来也自动更新,因为更改事件通过总线在内部传播(PublishSubject,除非有更好的方法?让我知道)。
调度程序来自调用者,而不是直接从存储库“继承”,这一点很重要;因为某些查询将被合并,因此不能来自不同的线程。基本上,我希望能够为整个 observable 链指定调度程序,并有可能在其中有多个查询 observables。
一般来说 - 这很好用......但是一旦将更改事件引入图片中,事情就会变得非常混乱,非常快。据我了解,这是因为主题将在与调用者相同的线程上传播其事件。这导致Query<T>
上述根据调用的位置在不同的调度程序上执行其工作,这subject.onNext(..)
就是挑战。
如何通过 PublishSubject 强制 ChangeEvents 在Observable<Query<T>>
与其创建的调度程序相同的调度程序上进行观察?没有明确指定 .observeOn()?
我对挑战的不同方法持开放态度,但从我的实验来看,这似乎是“正确”的方法。如果还有其他方法可以解决,请赐教。
interface Query<T>{
T findFirst();
}
Repository repo = new Repository();
repo.createQuery(IceCream.class) //Returns Observable<Query<IceCream>>
.map(it.findFirst()) //Returns IceCream
.map(it -> it.getName()) //Returns "Magnum Choco"
.subscribeOn(Schedulers.computation())
.unsubscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(it -> Timber.d("Got IceCream with name: %s",it))
我感谢您的智慧和帮助。对冰淇淋的渴望感到抱歉。