一、描述
对原始Observable的一个镜像,如果过了一个指定的时长仍没有发射数据,它会发一个错误通知。
如果原始Observable过了指定的一段时长没有发射任何数据,Timeout操作符会以一个onError通知终止这个Observable。
RxJava中的实现为timeout,但是有好几个变体。
第一个变体接受一个时长参数,每当原始Observable发射了一项数据,timeout就启动一个计时器,如果计时器超过了指定指定的时长而原始Observable没有发射另一项数据,timeout就抛出TimeoutException,以一个错误通知终止Observable。
这个timeout默认在computation调度器上执行,你可以通过参数指定其它的调度器。
二、示意图
三、示例代码
1 | Observable.create(new Observable.OnSubscribe<Integer>() { |
四、运行结果
1 | onNext: 1 |
- 经过100毫秒后,发射1;
- 再经过200毫秒后,发射2;
- 然后再经过250毫秒,还没有再发射新的数据项(这一次要300毫秒才发射),就超时了,就报出
TimeoutException
,以一个错误通知终止Observable。
五、更多
timeout操作符还有以下变体:
- timeout(long,TimeUnit)
- timeout()
- timeout(long,TimeUnit,Observable)
- timeout(long,TimeUnit,Observable,Scheduler)
- timeout(Func1)
- timeout(Func1,Observable)
- timeout(Func0,Func1)
- timeout(Func0,Func1,Observable)
详情可查阅下面的参考资料。
六、参考资料
PS:欢迎关注 SherlockShi 个人博客