RxJava2 Как связать Single с Завершаемым, чтобы он был подписан, когда Завершается - PullRequest
0 голосов
/ 01 июня 2018

Как связать Single с Completable таким образом, чтобы он подписывался после завершения Completable?

repository.downloadUser() это Single.

На основании отладки кажется, что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.
}

Edit : Я, вероятно, просто разбью его на два вызова: один для Completable, а затем еще один для остальных.Однако было бы хорошо знать, возможно ли это или нет, если кто-нибудь знает ...

1 Ответ

0 голосов
/ 01 июня 2018

Уверен, что вы используете фигурные скобки.Kotlin считает, что вы вызываете метод RxJava

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

, что означает тип возвращаемого значения Completable, но вы хотите, чтобы он был Single.Что вам нужно, это

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