微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RxJava;如何同步发出可观察量

我想同步发出两个Observable对象(它们是异步的),一个一个地返回第一个发出的Observable对象.如果第一个失败,则不应发出第二个.

假设我们有一个Observable签署用户,另一个Observable在登录自动选择用户的帐户.

这是我试过的:

public Observable<Accesstoken> signInAndSelectAccount(String username,String password)
{

    Observable<Accesstoken> ob1 = ...; // Sign in.
    Observable<Account> ob2 = ...; // Select account.


    return Observable.zip(
            ob1,ob2,new Func2<Accesstoken,Account,Accesstoken>() {
                @Override
                public Accesstoken call(Accesstoken accesstoken,Account account)
                {
                     return accesstoken;
                }
            });
}

遗憾的是,这对我的用例不起作用.它将以“ob1”开头并行发出/调用两个observable.

有人遇到类似的用例吗?或者有一个关于如何让observables以同步的方式等待彼此的想法,在那里可以返回第一个发出的?

提前致谢.

解决方法

在反应式编程中没有“等待”这样的术语.您需要考虑创建数据流,其中一个Observable可以由另一个Observable触发.在您收到令牌后,您需要接收帐户.它可能看起来像这样:
Observable<Account> accountObservable = Observable.create(new Observable.OnSubscribe<Accesstoken>() {
    @Override public void call(Subscriber<? super Accesstoken> subscriber) {
        subscriber.onNext(new Accesstoken());
        subscriber.onCompleted();
    }
}).flatMap(accesstoken -> Observable.create(new Observable.OnSubscribe<Account>() {
    @Override public void call(Subscriber<? super Account> subscriber) {
        subscriber.onNext(new Account(accesstoken));
        subscriber.onCompleted();
    }
}));

原文地址:https://www.jb51.cc/java/121948.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐