在以下方法中,如何将第一个Single的结果传递给第二个Single?
如现在所写,返回时somethingId为空。如果我将返回值更改为Single.just(somethingId)空字符串以外的其他值,它将返回该值。
有趣的是,如果我在方法中断点,它会在第5行和第6行之前停在第7行。
andThen在线7 的文档说:
返回一个Single,它将订阅此Completable,完成后将订阅{@code next} SingleSource。
为什么它似乎按照该顺序执行和/或有更好的方法来执行此操作?
1 override fun downloadSomething(): Single<String> {
2 var somethingId = ""
3 return remoteDataSource.downloadSomething() // this is a Single
4 .flatMapCompletable { something ->
5 somethingId = something.id
6 saveSomething(something) // this is a Completable
7 }.andThen(Single.just(somethingId))
8 }
Run Code Online (Sandbox Code Playgroud)
在这一点上,我唯一想做的就是为第saveSomething()6行的方法返回Single (有效)。但是,我只是更改了该方法的签名,以便可以在感觉不正确的特定方法中使用它。当然,有一种方法可以不执行此操作?
saveSomething如果flatMapCompletable完全避免该操作,则可以在不更改方法签名的情况下获得相同的结果:
1 override fun downloadSomething(): Single<String> {
2 return remoteDataSource.downloadSomething() // this is a Single
3 .flatMap { something ->
4 saveSomething(something).andThen(Single.just(something.id))
5 }
6 }
Run Code Online (Sandbox Code Playgroud)
要么:
1 override fun downloadSomething(): Single<String> {
2 return remoteDataSource.downloadSomething() // this is a Single
3 .flatMap { something ->
4 saveSomething(something).toSingleDefault(something.id)
5 }
6 }
Run Code Online (Sandbox Code Playgroud)
您目前遇到的问题是,它Single.just(somethingId)是在RxJava管道创建过程中执行的,因此,它发生在downloadSomething完成之前,因此,其值somethingId仍然是一个空字符串。
| 归档时间: |
|
| 查看次数: |
2972 次 |
| 最近记录: |