我有一个可观察命令序列。命令按顺序执行。现在,其中一个命令必须在执行时动态创建第二个可观察命令序列。在第一个序列继续下一个可观察量之前,必须完成第二个序列。这看起来像 git 中的合并(0 表示可观察的命令):
Seq1: -0-0-0-0 0-0-0-0-
/
Seq2: 0-0-0-0
我使用 concatEager() 在一个序列中实现顺序执行。问题是当前执行如下所示(=>订阅 seq2 后,它与 seq1 并行执行)。
Seq1: -0-0-0-0-0-0-0-0-
Seq2: 0-0-0-0-
有没有办法在 seq1 的第四个可观察对象中等待/阻止,直到 seq2 完成?还是在订阅 seq1 后合并?
使用 concatMap
.类似的东西
Observable.from(new Integer[]{ 0, 1, 2, 3, 4, 5})
.concatMap( l -> {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(l);
for (int i=0; i<l-1 ; i++) {
temp.add(l);
}
return Observable.from(temp);
})
确保两个可观察的等待在另一个完成之后的唯一方法是通过合并、压缩甚至更好的连接
@Test
public void testContact() {
Observable.concat(Observable.just("Hello"),
Observable.just("reactive"),
Observable.just("world"))
.subscribe(System.out::println);
}
看看组合运算符的工作原理
https://github.com/politrons/reactive