在下面的方法中,如何将第一个Single的结果传递给第二个Single?
如现在所写,当它返回时,somethingId
是空的。如果我将返回的 Single.just(somethingId)
中的值更改为空字符串以外的值,它将返回该值。
有趣的是,如果我在方法中设置断点,它会在第 7 行停止,然后再转到第 5 行和第 6 行。
第 7 行 andThen
的文档说:
Returns a Single which will subscribe to this Completable and once that is completed then will subscribe to the {@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 }
此时我唯一能想到的就是为第 6 行的 saveSomething()
方法返回一个 Single(可行)。但是,我正在更改该方法的签名,以便我可以在这个感觉不对的特定方法中使用它。当然有一种方法可以使它在不这样做的情况下工作吗?
最佳答案
如果完全避免 flatMapCompletable
操作,您可以在不更改 saveSomething
方法签名的情况下获得相同的结果:
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 }
或者:
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 }
您目前遇到的问题是 Single.just(somethingId)
作为 RxJava 管道创建的一部分执行,因此,它发生在 downloadSomething 完成之前,因此值somethingId
仍然是一个空字符串。
关于android - RxJava Single to Completable to Single - 如何将第一个 Single 的结果传递给第二个 Single,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50807932/