我有一个Observable命令序列。命令按顺序执行。现在,其中一个命令必须在执行时动态创建第二个Observable命令序列。在第一个序列继续下一个Observable之前,必须完成第二个序列。 这看起来像是git中的合并(0代表一个可观察的命令):
Seq1: -0-0-0-0 0-0-0-0-
\ /
Seq2: 0-0-0-0
我使用concatEager()在一个Sequence中实现顺序执行。问题是当前执行看起来如下(=>订阅seq2之后它与seq1并行执行)。
Seq1: -0-0-0-0-0-0-0-0-
\
Seq2: 0-0-0-0-
在seq2完成之前,有没有办法在seq1的第四个observable中等待/阻塞?或者在订阅seq1后合并?
答案 0 :(得分:1)
使用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);
})
答案 1 :(得分:0)
确保两个可观察的等待在另一个完成之后的唯一方法是通过合并,拉链或更好的连接
@Test
public void testContact() {
Observable.concat(Observable.just("Hello"),
Observable.just("reactive"),
Observable.just("world"))
.subscribe(System.out::println);
}
看看组合运算符的工作原理