Rx Android/Java:如何按顺序组合两个不同类型的可观察对象
Rx Android/Java: How to Sequentially combine two observable of different type
我想在特定时间延迟后检查用户的状态。
我有两个Observables:
Timer Observable:在特定延迟后发出事件。
可观察计时器 = Observable.timer((endTime - startTime), TimeUnit.SECONDS);
Observable
获取用户的当前状态。
可观察状态 = getCurrentStatusObservable(id);
我必须按顺序组合这些 observable,然后结果应该发出。
为了实现这一点,我使用了 zip 运算符和以下方法。
return Observable.zip(timer, status, new Func2<Long, CurrentStatus, CurrentStatus>() {
@Override
public Program call(Long aLong, CurrentStatus status) {
return program;
}
});
但问题是 status
observable
在 timer
打击之前被执行。因此 zip
运算符返回旧的 status
。但是我想要 status
Observable
在 timer
打击之后执行。
如果我使用了错误的运算符,请告诉我。我检查了 concat
运算符,但它需要相同类型的 Observable
。
您可以只使用常规 flatMap
return timer.flatMap(new Func1<Long, Observable<CurrentStatus>() {
@Override
public Observable<CurrentStatus> call(Long aLong) {
return status;
}
});
我想在特定时间延迟后检查用户的状态。
我有两个Observables:
Timer Observable:在特定延迟后发出事件。
可观察计时器 = Observable.timer((endTime - startTime), TimeUnit.SECONDS);
Observable
获取用户的当前状态。可观察状态 = getCurrentStatusObservable(id);
我必须按顺序组合这些 observable,然后结果应该发出。 为了实现这一点,我使用了 zip 运算符和以下方法。
return Observable.zip(timer, status, new Func2<Long, CurrentStatus, CurrentStatus>() {
@Override
public Program call(Long aLong, CurrentStatus status) {
return program;
}
});
但问题是 status
observable
在 timer
打击之前被执行。因此 zip
运算符返回旧的 status
。但是我想要 status
Observable
在 timer
打击之后执行。
如果我使用了错误的运算符,请告诉我。我检查了 concat
运算符,但它需要相同类型的 Observable
。
您可以只使用常规 flatMap
return timer.flatMap(new Func1<Long, Observable<CurrentStatus>() {
@Override
public Observable<CurrentStatus> call(Long aLong) {
return status;
}
});