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) } )
- 当传递的泛型扩展某些东西时,RxJava中compose和ObservableTransformer的奇怪行为
- 当我退出应用程序时,为什么在Android应用程序中使用Kotlin / rxJava编写android.os.TransactionTooLargeException? (的OnExit /的onPause)?
- Kotlin – 如何创建RxJava flatmap()的别名函数?
- 合并Observables列表,并等到所有完成
- 为什么我的RxJava设置阻止我的UI线程? 使用BluetoothAdapter.startLeScan回调
- Kotlin:如何从RxJava订阅者继承
- RxJava 2需要与RxJava 1(Kotlin)不同的Observable返回类型
- RxJava:在另一个异步生产中取消订阅异步观察
- 如何上传一个构造函数的返回值