## Timeout
对原始Observable的一个镜像,如果过了一个指定的时长仍没有发射数据,它会发一个错误通知
![Timeout](https://box.kancloud.cn/cfd7bb4e50023a97ab5fc3b02dbf89d4_1280x610.png)
如果原始Observable过了指定的一段时长没有发射任何数据,`Timeout`操作符会以一个`onError`通知终止这个Observable。
RxJava中的实现为`timeout`,但是有好几个变体。
![Timeout](https://box.kancloud.cn/9c5119684536d10ede0fed619c7ab3b8_1280x610.png)
第一个变体接受一个时长参数,每当原始Observable发射了一项数据,`timeout`就启动一个计时器,如果计时器超过了指定指定的时长而原始Observable没有发射另一项数据,`timeout`就抛出`TimeoutException`,以一个错误通知终止Observable。
这个`timeout`默认在`computation`调度器上执行,你可以通过参数指定其它的调度器。
* Javadoc: [timeout(long,TimeUnit)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(long,%20java.util.concurrent.TimeUnit))
* Javadoc: [timeout()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(long,%20java.util.concurrent.TimeUnit,%20rx.Scheduler))
![Timeout](https://box.kancloud.cn/c1f813709821fdc8332aa3dfb3cd91d0_1280x610.png)
这个版本的`timeout`在超时时会切换到使用一个你指定的备用的Observable,而不是发错误通知。它也默认在`computation`调度器上执行。
* Javadoc: [timeout(long,TimeUnit,Observable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(long,%20java.util.concurrent.TimeUnit,%20rx.Observable))
* Javadoc: [timeout(long,TimeUnit,Observable,Scheduler)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(long,%20java.util.concurrent.TimeUnit,%20rx.Observable,%20rx.Scheduler))
![Timeout](https://box.kancloud.cn/0eff5f2592f1ea2fc832f64e0bc28f68_1280x800.png)
这个版本的`timeout`使用一个函数针对原始Observable的每一项返回一个Observable,如果当这个Observable终止时原始Observable还没有发射另一项数据,就会认为是超时了,`timeout`就抛出`TimeoutException`,以一个错误通知终止Observable。
这个`timeout`默认在`immediate`调度器上执行。
* Javadoc: [timeout(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(rx.functions.Func1))
![Timeout](https://box.kancloud.cn/c39cc9c110f5fda688b6f4bee1d5d9bf_1280x800.png)
这个版本的`timeout`同时指定超时时长和备用的Observable。它默认在`immediate`调度器上执行。
* Javadoc: [timeout(Func1,Observable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(rx.functions.Func1,%20rx.Observable))
![Timeout](https://box.kancloud.cn/f091555231b44bce4cb0eaa66cd76741_1280x800.png)
这个版本的`time`除了给每一项设置超时,还可以单独给第一项设置一个超时。它默认在`immediate`调度器上执行。
* Javadoc: [timeout(Func0,Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(rx.functions.Func0,%20rx.functions.Func1))
![Timeout](https://box.kancloud.cn/b5578e564b892952af95741f8e567068_1280x800.png)
同上,但是同时可以指定一个备用的Observable。它默认在`immediate`调度器上执行。
* Javadoc: [timeout(Func0,Func1,Observable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#timeout(rx.functions.Func0,%20rx.functions.Func1,%20rx.Observable))
- ReactiveX
- Observables
- Single
- Subject
- Scheduler
- Operators
- 创建操作
- Create
- Defer
- Empty/Never/Throw
- From
- Interval
- Just
- Range
- Repeat
- Start
- Timer
- 变换操作
- Buffer
- FlatMap
- GroupBy
- Map
- Scan
- Window
- 过滤操作
- Debounce
- Distinct
- ElementAt
- Filter
- First
- IgnoreElements
- Last
- Sample
- Skip
- SkipLast
- Take
- TakeLast
- 结合操作
- And/Then/When
- CombineLatest
- Join
- Merge
- StartWith
- Switch
- Zip
- 错误处理
- Catch
- Retry
- 辅助操作
- Delay
- Do
- Materialize/Dematerialize
- ObserveOn
- Serialize
- Subscribe
- SubscribeOn
- TimeInterval
- Timeout
- Timestamp
- Using
- To
- 条件和布尔操作
- All/Contains/Amb
- DefaultIfEmpty
- SequenceEqual
- SkipUntil/SkipWhile
- TakeUntil/TakeWhile
- 算术和聚合操作
- Average/Concat/Reduce
- Max/Min/Count/Sum
- 异步操作
- 连接操作
- Connect
- Publish
- RefCount
- Replay
- 转换操作
- 阻塞操作
- 字符串操作
- 按字母顺序的操作符列表
- RxJava文档和教程
- RxJava入门指南
- RxJava使用示例
- 实现自定义操作符
- 自定义插件
- Backpressure
- 错误处理
- Android模块
- 参与开发
- 补充阅读材料