3

2 つの異なるタイムアウト値を使用する例を動作させようとしています。最初の放出の最初の大きな値と、その後のすべての放出の短い値。この例は、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 を使用し、提案された変更を適用しても、まだエラーが発生します。とにかくコードを実行しようとすると、予想どおり、次のようになります。

Error:(34, 21) Kotlin: Interface Function does not have constructors

インターフェイス関数にはコンストラクターがありません

4

1 に答える 1