RxKotlin(RxJava2)timeout()不会抛出TimeoutException

我试图得到一个使用两个不同超时值的示例工作。 第一个排放量的初始值较大,随后的所有排放量则为较短的值。 这个例子是从RxJava v1x的Java转换为Kotlin,虽然我试图这是v2x(不知道这是否有任何区别)。

问题是第一个事件的超时不会引发TimeoutException 。 设置的值低于500毫秒,我期待一个堆栈跟踪打印,但我得到的输出,如果没有超时已经发生(后续排放超时设置为40毫秒导致堆栈跟踪如预期)。 以下示例阻止成功初始超时有什么问题?

 fun nextSolarEclipse(after: LocalDate): Observable<LocalDate> { 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<String>) { nextSolarEclipse(LocalDate.now()) .timeout<Long, Long>( { 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<Long, Long>( Observable.timer(400, TimeUnit.MILLISECONDS), Function { Observable.timer(40, TimeUnit.MILLISECONDS) } )