RXJava如何等待/插入子序列

时间:2016-07-15 13:11:49

标签: rx-java

我有一个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后合并?

2 个答案:

答案 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);
}

看看组合运算符的工作原理

https://github.com/politrons/reactive