首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何跳过第一个项目,如果在RxJava上的某个时间段获得第二个项目

如何跳过第一个项目,如果在RxJava上的某个时间段获得第二个项目
EN

Stack Overflow用户
提问于 2020-04-17 19:30:52
回答 2查看 165关注 0票数 0

我需要在收到事件(表示任何数据项rxJava)后的X秒内执行一些操作。但如果在X秒结束之前获得另一个事件,则需要在X秒内再次执行计时器重置和操作。

换句话说,我们有用户可以与之交互的UI元素。在用户对此UI元素保持不活动X秒后,我们需要执行一些操作。简单的解决方案可能如下所示:

代码语言:javascript
运行
复制
Disposable disp;
void init() {
             final Flowable<Boolean> flowable = 
mapDragOrZoomSubject.delay(TIME_X, TimeUnit.SECONDS)
                    .toFlowable(BackpressureStrategy.DROP);
        disp = flowable. ...subscribeWith(ACTION);  // <-- action in X seconds of inactivity
    }

void gotNewUserInteraction() {
    disp.dispose();
    init();
}

如何在不处理和重新创建基于某些rxJava操作符的some的情况下做到这一点?

EN

Stack Overflow用户

发布于 2020-04-17 21:11:38

尝试throttleWithTimeout(...)操作符:

代码语言:javascript
运行
复制
@Test
public void testThrottleWithTimeout()
{
    Subject<String> eventSubject = PublishSubject.create();
    TestScheduler scheduler = new TestScheduler();

    TestObserver<String> observer = eventSubject
            .throttleWithTimeout( 1, TimeUnit.SECONDS, scheduler )
            .test();

    eventSubject.onNext( "foo" );
    scheduler.advanceTimeBy( 500, TimeUnit.MILLISECONDS );
    observer.assertNoValues();

    eventSubject.onNext( "bar" );
    scheduler.advanceTimeBy( 500, TimeUnit.MILLISECONDS );
    observer.assertNoValues();

    scheduler.advanceTimeBy( 500, TimeUnit.MILLISECONDS );
    observer.assertValue( "bar" );
}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61270598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档