在mergeDelayError()之后它是如何工作的Observable.take()?

时间:2015-12-04 15:47:59

标签: java rx-java observable

我有一些像这样的代码:

    Set<Something> set = HashSet<>();
    // [...]
    return Observable.mergeDelayError(
            Observable.from(set)
                    .map(something -> process(something)))
            .take(1);

根据文件:

  

mergeDelayError:将发出Observable的Observable展平   一个Observable,允许观察者接收全部   无需成功从所有源Observable中发出项目   被其中一个人的错误通知打断。

到目前为止,我明白了。 我的问题是关于方法take():它会等待所有Observable在获取第一个结果之前返回一些东西,还是会从第一个完成的Observable获取第一个结果?

TIA,

1 个答案:

答案 0 :(得分:1)

  

在获取第一个结果之前,是否会等待所有Observable返回一些内容

那是对的

<强> UPD

根据该测试,它返回第一个发射项目

    Observable.mergeDelayError(
            Observable.just(null)
                    .doOnNext(x -> {
                        throw new RuntimeException();
                    }),
            Observable.just(1).delay(70, TimeUnit.MILLISECONDS),
            Observable.just(2).delay(50, TimeUnit.MILLISECONDS))
            .take(1)
            .subscribe(System.out::print);