我刚刚开始将RxJava引入我现有的项目中。
我有一个方法(在数据层中)用于名为getUser()
的数据库操作,它返回Observable<User>
。
我在3个不同的地方使用这种方法。在3个地方中,在2个地方我需要使用该方法返回Observable<User>
。但是,我需要在doOnNext()
副作用运算符中访问此方法的地方出现问题。
AFAIK,doOnNext()
不会改变流并继续前一个线程。如果流已经在io线程上,我们可以继续新的后台操作,而无需创建/使用Observable。
段
getDataManager().getUser(id)
.doOnNext(user -> getDataManager().insertUser(user))
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe()
这个insertUser()
方法会返回Observable<Long>
,这就是我想要的其他部分。但是对于这个副作用运算符我需要它只返回Long。
有什么方法可以删除Observable
包装器吗?或者我需要创建两种不同的方法吗?
答案 0 :(得分:2)
对于返回Observable
的从属计算/ IO,一般使用flatMap
或concatMap
运算符。
getDataManager()
.getUser(id)
.concatMap(user ->
getDataManager()
.insertUser(user)
)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe()
如果您仍需要原始user
,只需将其映射回来:
getDataManager()
.getUser(id)
.concatMap(user ->
getDataManager()
.insertUser(user)
.ignoreElements()
.andThen(Observable.just(user))
)
.subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe()