RxKotlin(RxJava2)timeout()不会抛出TimeoutException
我试图得到一个使用两个不同超时值的示例工作。 第一个排放量的初始值较大,随后的所有排放量则为较短的值。 这个例子是从RxJava v1x的Java转换为Kotlin,虽然我试图这是v2x(不知道这是否有任何区别)。
问题是第一个事件的超时不会引发TimeoutException
。 设置的值低于500毫秒,我期待一个堆栈跟踪打印,但我得到的输出,如果没有发生超时(后续排放超时设置为40毫秒导致堆栈跟踪如预期)。 以下示例阻止成功初始超时有什么问题?
fun nextSolarEclipse(after: LocalDate): Observable { return Observable .just( LocalDate.of(2016, Month.MARCH, 9), LocalDate.of(2016, Month.SEPTEMBER, 1), LocalDate.of(2017, Month.FEBRUARY, 26), LocalDate.of(2017, Month.AUGUST, 21), LocalDate.of(2018, Month.FEBRUARY, 15), LocalDate.of(2018, Month.JULY, 13), LocalDate.of(2018, Month.AUGUST, 11), LocalDate.of(2019, Month.JANUARY, 6), LocalDate.of(2019, Month.JULY, 2), LocalDate.of(2019, Month.DECEMBER, 26) ) .skipWhile { date -> !date.isAfter(after) } .zipWith( Observable.interval(500, 50, TimeUnit.MILLISECONDS), { date, _ -> date } ) } fun main(args: Array) { nextSolarEclipse(LocalDate.now()) .timeout( { Observable.timer(400, TimeUnit.MILLISECONDS) }, { Observable.timer(40, TimeUnit.MILLISECONDS) } ) .subscribe( { println(it) }, { it.printStackTrace() }, { println("Completed") } ) TimeUnit.MILLISECONDS.sleep(2000) }
编辑:20-Jun-17
使用Kotlin 1.1.2-5,使用IntelliJ,并应用建议的更改,我仍然得到错误。 无论如何,试图运行代码的结果,正如我所料,与:
Error:(34, 21) Kotlin: Interface Function does not have constructors
这是Kotlin的另一个例子,暗示你需要一个函数而不是一个Observable
实例。 尝试这个:
.timeout( Observable.timer(400, TimeUnit.MILLISECONDS), Function { Observable.timer(40, TimeUnit.MILLISECONDS) } )
- 致命例外:当触发器处置时,RxCachedThreadScheduler-1。 为什么?
- Kotlin和RxJava2 zip运算符 – 以下函数都不能用提供的参数调用
- 在RxKotlin / RxJava中用BehaviorSubject自动创建热可观察对象
- 如何获得可观察到的最新价值
- 对于用作表达式的Kotlin函数,有没有简洁的方法来操作并返回一个值?
- 运行多个测试(Kotlin)时,只有第一个测试通过TestScheduler,
- 弹簧5反应堆 – 每1秒发射一次物品
- 例外:尽管我在另一个线程上进行了subsribed,但不能在UI线程上调用blockingConnect
- 如何在RxJava 2和Kotlin中将null传递给可空类型的Observable