Rx java 如何阻止时间间隔不可见
我是rxjava新手,我想每2秒执行一个轮询任务50次,如果任务中满足某些条件,它可能会终止,我尝试使用Rx java 如何阻止时间间隔不可见,rx-java,Rx Java,我是rxjava新手,我想每2秒执行一个轮询任务50次,如果任务中满足某些条件,它可能会终止,我尝试使用Observable.interval,但我发现除了抛出异常之外,没有其他方法终止它,是否还有其他操作符可以满足我的目标? 顺便说一句,此功能作为API提供可观察对象,因此我无法通过解绑来控制订户和终止 Observable.interval(timeout, interval, TimeUnit.SECONDS) .flatmap(task - > task) 我猜Observabl
Observable.interval
,但我发现除了抛出异常之外,没有其他方法终止它,是否还有其他操作符可以满足我的目标?
顺便说一句,此功能作为API提供可观察对象,因此我无法通过解绑来控制订户和终止
Observable.interval(timeout, interval, TimeUnit.SECONDS)
.flatmap(task - > task)
我猜
Observable.takeUntil(stopperedicate)
或Observable.takeWhile(谓词)
可以帮助您:
Observable.interval(timeout, interval, TimeUnit.SECONDS)
.takeWhile(val -> val < 42)
Observable.interval(超时、间隔、时间单位.秒)
.takeWhile(val->val<42)
此处observable将在第42次尝试时终止您可以使用
takeUntil
停止一个observable。间隔
,如下所示:
Observable.interval(0, 1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.takeUntil(new Predicate<Long>() {
@Override
public boolean test(Long aLong) throws Exception {
return aLong == 10;
}
})
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.d(TAG, "Tick: " + aLong);
}
});
可观测间隔(0,1,时间单位秒)
.observeOn(AndroidSchedulers.mainThread())
.takeUntil(新谓词(){
@凌驾
公共布尔测试(长期)引发异常{
沿=10返回;
}
})
.订阅(新消费者){
@凌驾
public void accept(长期)引发异常{
日志d(标记“勾选:”+沿);
}
});
在本例中,10秒后,observable将停止。以下代码将产生以下输出:
Starting interval..
Next tick is: 1
Next tick is: 2
Next tick is: 3
Next tick is: 4
Next tick is: 5
Interval complete
如果取消对此行的注释://If(t==3)dispose();“它将只打印以下内容:
Starting interval..
Next tick is: 1
Next tick is: 2
Next tick is: 3
守则:
Observable.interval(1, TimeUnit.SECONDS).take(5).subscribeWith(new DisposableObserver<Long>() {
@Override public void onStart() {
// do whatever might be needed here to run once before
// the interval begins
System.out.println("Starting interval..");
}
@Override public void onNext(Long t) {
System.out.println("Next tick is: "+t);
// if( t==3 ) dispose();
}
@Override public void onError(Throwable t) {
t.printStackTrace();
}
@Override public void onComplete() {
// will be called once when all 5 ticks are completed
// will NOT be called if dispose() has been called
System.out.println("Interval complete");
}
});
Observable.interval(1,TimeUnit.SECONDS)。take(5)。subscribeWith(新的可配置观察者(){
@重写公共void onStart(){
//做任何可能需要在这里运行一次的事情
//幕间休息开始了
System.out.println(“起始间隔”);
}
@覆盖公共void onNext(长t){
System.out.println(“下一个勾号为:“+t”);
//如果(t==3)dispose();
}
@覆盖公共无效onError(可丢弃的t){
t、 printStackTrace();
}
@重写公共void onComplete(){
//将在所有5个记号完成时调用一次
//如果已调用dispose(),则不会调用
System.out.println(“间隔完成”);
}
});
什么是超时,这是执行的最长时间还是发出第一个值的initialDelay?我们可以向此停止事件添加回调吗?i、 它还没有完成吗?我想我在找像doonnsbscribe()或doOnComplete()这样的东西