首页
学习
活动
专区
圈层
工具
发布

Concat
EN

Stack Overflow用户
提问于 2022-05-31 12:19:10
回答 1查看 77关注 0票数 0

我有一个List of ConnectableObservable,当完成前一项时,我希望从列表中运行一项。我尝试过在列表中应用concat()方法,但是这个方法显然不适用于ConnectableObservables。我该怎么做?

这就是我尝试过的:

代码语言:javascript
复制
ConnectableObservable<Long> observable1 =
    Observable.timer(1500, TimeUnit.MILLISECONDS).publish();

ConnectableObservable<Long> observable2 =
    Observable.timer(1550, TimeUnit.MILLISECONDS).publish();


List<ConnectableObservable<Long>> list = new ArrayList<>();
list.add(observable1);
list.add(observable2);

Observable.concat(list).doOnNext(aLong -> {
    Log.i("result", aLong.toString());
}).subscribe();

observable1.connect();
observable2.connect();

在这里,observable2observable1完成后运行50毫秒,而不是预期的1550毫秒。

EN

回答 1

Stack Overflow用户

发布于 2022-06-01 06:44:51

您没有在connect()上调用ConnectableObservable方法,因此它没有开始发布任何内容。

代码语言:javascript
复制
observable1.connect();
observable2.connect();

在你的代码末尾。或者,您可以将.autoConnect(1)添加到observable1observable2中。

它不能同时工作,如下junit所确认的那样:

代码语言:javascript
复制
    @Test
    void connectableTest() {
        TestScheduler testScheduler = new TestScheduler();
        ConnectableObservable<Integer> observable1 =
                Observable
                        .just(1, 2, 3)
                        .zipWith(
                                Observable.interval(0, 1, TimeUnit.SECONDS, testScheduler), (integer, time) -> integer)
                        .publish();
        ConnectableObservable<Integer> observable2 =
                Observable
                        .just(4, 5, 6)
                        .zipWith(
                                Observable.interval(3, 1, TimeUnit.SECONDS, testScheduler), (integer, time) -> integer)
                        .publish();

        List<ConnectableObservable<Integer>> list = new ArrayList<>();
        list.add(observable1);
        list.add(observable2);

        TestObserver<Integer> output = Observable.concat(list).test();

        observable1.connect();
        observable2.connect();

        testScheduler.advanceTimeBy(20, TimeUnit.SECONDS);
        output.assertValues(1,2,3,4,5,6).assertComplete();
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72447671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档