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

Cly*_*yde 1 kotlin rx-java

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

return Completable.complete().toSingleDefault(0L).flatMap { Single.just(1L) }
Run Code Online (Sandbox Code Playgroud)

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

Completable.complete().toSingle { Single.just(1L) }
Run Code Online (Sandbox Code Playgroud)

我遇到错误。是否缺少功能Completable或我正在忽略某些东西?

mar*_*one 6

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

return Completable.complete()
    .andThen(Single.just(1L))
Run Code Online (Sandbox Code Playgroud)

正如@akarnokd所说的,这是一个非依赖延续的情况

如果您的源代码需要在运行时解析,则这将是一个与延迟有关的延续,您需要defer

return Completable.complete()
    .andThen(Single.defer(() -> Single.just(1L)))
Run Code Online (Sandbox Code Playgroud)

  • `andThen` 将返回组合函数返回的任何内容。在示例中,它返回 `Single.just(1L)`,因此您可以从中得到一个 `Single`。 (2认同)
  • @JohnyTex:除非你添加一个 `onError` 处理程序,否则通常的 RxJava 行为将会启动。根据它发生的位置,你的 `andThen` 将不会被执行。 (2认同)