将Completable转换为Single的规范方法?

时间:2018-06-03 01:07:08

标签: kotlin rx-java

我有一个我要执行的RxJava Completable,然后链接到Single<Long>。我可以这样写:

return Completable.complete().toSingleDefault(0L).flatMap { Single.just(1L) }

但这似乎不必要地复杂化。我原以为Completable#toSingle()会做这个工作,但是如果我写的话:

Completable.complete().toSingle { Single.just(1L) }

我收到错误。 Completable中是否存在缺失的功能,或者我忽略了什么?

1 个答案:

答案 0 :(得分:2)

您可能想要使用andThen操作符,该操作符将在Completable完成后订阅您发送给它的源。

return Completable.complete()
    .andThen(Single.just(1L))

正如@akarnokd所说,这是non-dependent continuations的情况。

如果您的源需要在运行时解析,那么这将是deferred-dependent continuation,您需要defer它:

return Completable.complete()
    .andThen(Single.defer(() -> Single.just(1L)))