RxJava2如何将Single链接到Completable,以便在Completable完成时订阅它

时间:2018-06-01 05:42:14

标签: android rx-java2

如何将Single链接到Completable,以便在Completable完成时订阅它?

repository.downloadUser()是单身。

基于调试,似乎此方法中的Single被调用但从未订阅(即调用downloadUser()方法,但调用它创建的Single内没有代码)。

问题是,如何使用原始订阅者在链中订阅repository.downloadUser() Single?我错过了什么或做错了什么?或者这不可能吗?

fun login(username: String, password: String): Completable {    
    return repository.login(username, password)
        .andThen {
            repository.downloadUser() // This is a Single
                .flatMap { downloadedUser ->
                    user = downloadedUser
                    it.toSingle()
                }
                // When I get this part working there are other things I want to 
                // chain as well.
}

编辑:我可能会将其分为两个调用,一个用于Completable,另一个用于其余调用。但是,如果有人知道,那么知道这是否可能仍然是好的...

1 个答案:

答案 0 :(得分:5)

很确定这是你使用花括号。 Kotlin认为你正在调用RxJava方法

public final Completable andThen(CompletableSource next) {
   return concatWith(next);
}

表示返回类型为Completable,但您希望它为Single。你需要的是

repository.login(username, password)
    .andThen(repository.downloadUser())
    .flatmap { ... }