Rx Android / Java:如何顺序组合两个不同类型的observable

时间:2016-04-08 12:23:42

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

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

我有两个Observables:

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

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

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

    Observable status = getCurrentStatusObservable(id);

  3. 我必须按顺序组合这些observable然后结果应该发出。 为了实现这一点,我使用了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打击后执行Observable timer

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

1 个答案:

答案 0 :(得分:1)

您只能使用常规flatMap

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