Как запустить один за другим, используя источник из первого - PullRequest
0 голосов
/ 25 января 2019

у меня 2 сингла.Во-первых, я получаю токен, а во-вторых, мне нужно его использовать, а затем я должен сохранить некоторую информацию из второго сингла и вернуть завершенный.Я думал сделать это с помощью полных и andThen, как это:

String token;
IStoreProvider storeProvider;
IWebProvider webProvider;

public Completable getUserInfo(){
    return Completable.fromSingle(Completable
            .fromSingle(storeProvider
                    .getToken()
                    .doOnSuccess(x->token=x))
            .andThen(webProvider.getUserInfo(token)
                    .doOnSuccess(x->storeProvider.saveUserInfo(x)));

interface IStoreProvider{
    Single<String> getToken();
    Completable saveUserInfo(UserInfo userInfo);
}

interface IWebProvider{
    Single<UserInfo> getUserInfo(token);
}

Но это не работает.Как я могу это сделать?

1 Ответ

0 голосов
/ 26 января 2019

Ваш поток создается до его выполнения, поэтому во время создания token = null и, следовательно, вы получите null в getUserInfo.flatMap поможет вам.

public Completable getUserInfo() {
    return storeProvider.getToken()
            .flatMap(token -> webProvider.getUserInfo(token))
            .flatMapCompletable(userInfo -> storeProvider.saveUserInfo(userInfo));
}
...