【问题标题】:Rx Android/Java: How to Sequentially combine two observable of different typeRx Android/Java:如何顺序组合两个不同类型的可观察对象
【发布时间】:2016-04-08 12:23:41
【问题描述】:

我想在特定时间延迟后检查用户的状态。

我有两个Observables:

  1. Timer Observable:在特定延迟后发出事件。

    Observable timer = Observable.timer((endTime - startTime), TimeUnit.SECONDS);

  2. Observable获取用户当前状态。

    可观察状态 = getCurrentStatusObservable(id);

我必须按顺序组合这些可观察对象,然后结果应该发出。 为了实现这一点,我使用了 zip 运算符和以下方法。

return Observable.zip(timer, status, new Func2<Long, CurrentStatus, CurrentStatus>() {
            @Override
            public Program call(Long aLong, CurrentStatus status) {
                return program;
            }
        });

但问题是 status observabletimer 打击之前被执行。因此zip 运算符返回的是旧的status。但我希望status Observabletimer 打击后执行。

如果我使用了错误的运算符,请告诉我。我检查了concat 运算符,但它需要相同类型的Observable

【问题讨论】:

    标签: functional-programming rx-java reactive-programming rx-android


    【解决方案1】:

    您可以只使用普通的flatMap

    return timer.flatMap(new Func1<Long, Observable<CurrentStatus>() {
        @Override
        public Observable<CurrentStatus> call(Long aLong) {
            return status;
        }
    });
    

    【讨论】:

    • 我同意你的回答。我试图为此使用 zip 运算符,使用 flatMap 是简单而正确的方法。有没有办法通过使用 flatMap 以外的运算符来完成相同的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多