gpt4 book ai didi

rx-java - RxKotlin (RxJava2) timeout() 不会抛出 TimeoutException

转载 作者:行者123 更新时间:2023-12-02 16:52:27 26 4
gpt4 key购买 nike

我正在尝试使用两个不同的超时值来运行示例。第一次发射的初始值较大,然后所有后续发射的值较小。该示例从 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)
}

编辑:2017 年 6 月 20 日

使用 Kotlin 1.1.2-5,使用 IntelliJ,并应用建议的更改,我仍然收到错误。正如我所期望的,无论如何尝试运行代码都会产生:

错误:(34, 21) Kotlin:接口(interface)函数没有构造函数

Interface Function does not have constructors

最佳答案

这是 Kotlin 的另一种情况,暗示您需要一个函数而不是 Observable 实例。试试这个:

.timeout<Long, Long>(
Observable.timer(400, TimeUnit.MILLISECONDS),
Function { Observable.timer(40, TimeUnit.MILLISECONDS) }
)

关于rx-java - RxKotlin (RxJava2) timeout() 不会抛出 TimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44640465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com