简体   繁体   中英

How run one Single after another using source from first

I have 2 Single. In first I receive token and in second I need use it, and then I must save some info from second single and return completable. I thought do this with completable and andThen, like this:

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);
}

But its dosen't work. How I can do it?

Your stream is created before its executed, so during creation token=null and therefore you will get null in getUserInfo . flatMap will help you.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM