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

前端之家收集整理的这篇文章主要介绍了RxJava;如何同步发出可观察量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想同步发出两个Observable对象(它们是异步的),一个接一个地返回第一个发出的Observable对象.如果第一个失败,则不应发出第二个.

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

这是我试过的:

  1. public Observable<AccessToken> signInAndSelectAccount(String username,String password)
  2. {
  3.  
  4. Observable<AccessToken> ob1 = ...; // Sign in.
  5. Observable<Account> ob2 = ...; // Select account.
  6.  
  7.  
  8. return Observable.zip(
  9. ob1,ob2,new Func2<AccessToken,Account,AccessToken>() {
  10. @Override
  11. public AccessToken call(AccessToken accessToken,Account account)
  12. {
  13. return accessToken;
  14. }
  15. });
  16. }

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

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

提前致谢.

解决方法

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

猜你在找的Java相关文章