有没有像RxJava中的Promise.all()这样的方法?

cho*_*rin 5 java android rx-java

我有个问题.

我需要通过项目ID列表获取一些项目的列表.起初,我试过了

Observable.from(itemIds)
  .flatMap(itemId -> requestToServer(itemId))
  .subscribe(item -> { /* do something */ });
Run Code Online (Sandbox Code Playgroud)

但是运营商flatMap不保证物品的顺序.我需要按顺序获得项目ItemIds.

如果有api就好了Promise.all().有没有像Promise.all()RxJava 一样的方式?或任何其他方式?

Mal*_*alt 7

听起来你正在寻找Zip运营商

例如:

Observable<Integer> obs1 = Observable.just(1);
Observable<String> obs2 = Observable.just("Blah");
Observable<Boolean> obs3 = Observable.just(true);

Observable.zip(obs1, obs2, obs3, (Integer i, String s, Boolean b) -> i + " " + s + " " + b)
 .subscribe(str -> System.out.println(str));
Run Code Online (Sandbox Code Playgroud)

打印:

1 Blah true


Tom*_*m G 1

请改用concatMap。这将按顺序连接发出的 Observables,而不是合并它们的排放

返回一个新的 Observable,该 Observable 发出的项是通过应用您向源 Observable 发出的每个项提供的函数而产生的,其中该函数返回一个 Observable,然后发出通过连接这些结果 Observable 所产生的项。