【问题标题】:Start emitting after another observable emitted its first item在另一个 observable 发射它的第一个项目后开始发射
【发布时间】:2017-12-12 22:27:59
【问题描述】:

我有一个我似乎无法弄清楚的简单用例。

给定 2 个 observables,A 和 B

A 在 B 发射第一个项目后开始发射项目,B 可以继续发射项目,这应该不再影响 A。

我需要这个,因为 A 需要 B 发出的第一个值才能开始发出。

我已经尝试了 skipUntil 和 startWith 都无济于事。

【问题讨论】:

    标签: rxjs rx-java observable rx-java2 reactivex


    【解决方案1】:

    我觉得flatMap可以帮你做你想做的事:

    Observable<Integer> createA(Observable<Integer> B) {
        return B.take(1).flatMap(b -> {
            /* replace with your Observable A implementation here */
            BehaviorSubject<Integer> subjectA = BehaviorSubject.create();
            return subjectA;
        });
    }
    

    此方法返回一个 Observable A,它仅在使用 Observable B 发出的第一个值初始化后才开始发射。

    【讨论】:

    • 这行得通,顺便说一句,如果你有 2 个或更多的 observables 取决于 B 的第一次发射的结果,你会怎么做?只需复制代码并将 A 替换为 C,D,E...?
    • @Linxy 是的,您可以复制代码。我遇到过类似的情况,我需要很多方法,这些方法都依赖于来自 Observable 的初始化数据。我创建了一个方法getInit(),它返回初始化Observable(本质上返回上面的B.take(1)),然后其他依赖的方法基本上是return getInit().flatMap(...)。因此,同样的模式,他们只是使用一种方法来获取 init Observable 而不是将其传入。这可能更多地取决于您如何使用每个 Observable 的细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多