每个项目有一个rx.Observable.timeout
但不是所有数据。
但是如果在特定时间段内没有发出数据,我需要一个时间表。
final Subscriber<Integer> sub = new Subscriber<Integer>() {
@Override
public void onNext(Integer num) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
System.out.println(num);
}
@Override
public void onCompleted() {
System.out.println("--------------- Done ---------------");
}
@Override
public void onError(Throwable e) {
//System.out.println("Error!!! + e");
}
};
Observable.range(1, 10000)
.map(x -> x * 10)
//.last()
.timeout(10, TimeUnit.SECONDS)
.doOnError( e -> {System.out.println("Errrorrr " + e);})
.subscribe(sub);
答案 0 :(得分:1)
您可以将takeUntil(Observable)
timer()
映射到例外:
source.takeUntil(
Observable.timer(10, TimeUnit.SECONDS)
.flatMap(ignored -> Observable.error(new TimeoutException()))
)
.subscribe(/* ... */);
答案 1 :(得分:0)
使用两个来源:一个发出数据,一个在延迟后抛出超时异常。合并两者:
Observable timeoutObservable = Observable.error(new TimeoutException())
.delay(10, TimeUnit.SECONDS, true);
return Observable.merge(dataObservable, timoutObservable);