我的 observables 是这样定义的
val initLoading = Observable.fromCallable { println("${System.currentTimeMillis()}") }
.subscribeOn(Schedulers.computation())
.delay(WAIT_TIME, TimeUnit.SECONDS)
.map { "loading ${System.currentTimeMillis()}" }
.observeOn(AndroidSchedulers.mainThread())
val click = RxView.clicks(button).map { "click ${System.currentTimeMillis()}" }
initLoading.concatWith(click)
.subscribeBy(
onNext = { println("result $it") },
onError = { throw it }
)
initialLoading
开始在 Activity 的onCreate
方法处运行。click
在按钮单击时执行。我有两个案例,第一个有效,第二个无效。
情况1
活动开始并在几秒钟后 单击按钮。WAIT_TIME
输出:
01-23 13:08:07.170 I/System.out: 1516698487170
01-23 13:08:17.174 I/System.out: result loading 1516698497172
01-23 13:08:29.258 I/System.out: result click 1516698509258
案例2
活动开始并在期间结束之前 单击按钮。WAIT_TIME
输出
01-23 13:09:07.392 I/System.out: 1516698547392
01-23 13:09:17.398 I/System.out: result loading 1516698557395
所以,问题是点击事件丢失了。我希望点击事件等待加载,然后继续工作。简而言之,案例 2 的输出应该与案例 1 相同。
我如何使用 rx 运算符来细香葱这个。我试过merge
了,但它只是结合了两者,点击事件不等待加载。
我也尝试过reply, cache, publish, share
,但无法让它们的正确组合按我的意愿工作。