【发布时间】:2018-09-27 05:39:22
【问题描述】:
我在 Kotlin 中有这两个 Observables,其中只是充当计时器,另一个是 HTTP 网络调用响应 Observer。
timerDisposable = Observable.timer(daleyABCControlResetSeconds, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.doOnNext {
if (getABCUpdate() != null) {
Log.d("ABC", "Media status reset after 3 seconds: ")
updateABCResponse(getABCUpdate())
}
}.subscribe()
disposable = audioApi.setABCUpdate(abcUpdate)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
timerDisposable.dispose()
updateABCResponse(it)
Log.d("ABC", "Media Status updated:")
}, {
Log.d("ABC", "Error updating Media Status: " + it.message)
isABCControlChangeRequested = false
})
我对这种方法不满意,谁能指导我正确的方向来充分利用rx 的潜力。提前致谢。
编辑
Observable.combineLatest(Observable.timer(daleyABCControlResetSeconds, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
.doOnNext {
if (getABCUpdate() != null) {
Log.d("ABC", "Media status reset after 3 seconds: ")
updateABCResponse(getABCUpdate())
}
},
audioApi.setABCUpdate(abcUpdate)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()),
BiFunction<Long, ABCStatusUpdate, ABCStatusUpdate> { _, abcStatusUpdate ->
abcStatusUpdate
})
.subscribe({
timerDisposable.dispose()
updateABCResponse(abcStatusUpdate)
Log.d("ABC", "Media Status updated:")
}, {
Log.d("ABC", "Error updating Media Status: " + abcStatusUpdate.vol)
isABCControlChangeRequested = false
})
【问题讨论】:
-
你能告诉
updateABCResponse(getABCUpdate())方法在做什么 -
它只是使用
PublishSubjectpublish/listen 将数据发送到另一个类 -
你能更清楚地告诉你你想做什么吗?你想在特定的
delay之后执行http请求吗?例如,等待几秒钟 -> 执行请求 -> updateABCResponse?在那种情况下audioApi.setABCUpdate()执行什么操作? -
标签: android kotlin rx-java2 zipwith