gpt4 book ai didi

android - RxJava Single to Completable to Single - 如何将第一个 Single 的结果传递给第二个 Single

转载 作者:行者123 更新时间:2023-11-29 14:43:34 24 4
gpt4 key购买 nike

在下面的方法中,如何将第一个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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com