# Delay
延迟一段指定的时间再发射来自Observable的发射物
![delay](https://box.kancloud.cn/2a09cb60b9484884581a9794b8fc249c_1496x562.png)
`Delay`操作符让原始Observable在发射每项数据之前都暂停一段指定的时间段。效果是Observable发射的数据项在时间上向前整体平移了一个增量。
RxJava的实现是 `delay`和`delaySubscription`。
![delay](https://box.kancloud.cn/46f8abf6d0aaa28c18b7857e646abfa9_1280x620.png)
第一种`delay`接受一个定义时长的参数(包括数量和单位)。每当原始Observable发射一项数据,`delay`就启动一个定时器,当定时器过了给定的时间段时,`delay`返回的Observable发射相同的数据项。
注意:`delay`不会平移`onError`通知,它会立即将这个通知传递给订阅者,同时丢弃任何待发射的`onNext`通知。然而它会平移一个`onCompleted`通知。
`delay`默认在`computation`调度器上执行,你可以通过参数指定使用其它的调度器。
* Javadoc: [delay(long,TimeUnit)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(long,%20java.util.concurrent.TimeUnit))
* Javadoc: [delay()](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(long,%20java.util.concurrent.TimeUnit,%20rx.Scheduler))
![delay](https://box.kancloud.cn/ebfe68f5aa4d2149192ac02f991857a6_1280x900.png)
另一种`delay`不实用常数延时参数,它使用一个函数针对原始Observable的每一项数据返回一个Observable,它监视返回的这个Observable,当任何那样的Observable终止时,`delay`返回的Observable就发射关联的那项数据。
这种`delay`默认不在任何特定的调度器上执行。
* Javadoc: [delay(Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(rx.functions.Func1))
![delay](https://box.kancloud.cn/10ab185860c94d9a8d03d964d04e58b1_1280x900.png)
这个版本的`delay`对每一项数据使用一个Observable作为原始Observable的延时定时器。
这种`delay`默认不在任何特定的调度器上执行。
* Javadoc: [delay(Func0,Func1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delay(rx.functions.Func0,%20rx.functions.Func1))
![delay](https://box.kancloud.cn/92a394ad958115ce5c5e646fa1742b54_1280x620.png)
还有一个操作符`delaySubscription`让你你可以延迟订阅原始Observable。它结合搜一个定义延时的参数。
`delaySubscription`默认在`computation`调度器上执行,你可以通过参数指定使用其它的调度器。
* Javadoc: [delaySubscription(long,TimeUnit)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delaySubscription(long,%20java.util.concurrent.TimeUnit))
* Javadoc: [delaySubscription(long,TimeUnit,Scheduler)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delaySubscription(long,%20java.util.concurrent.TimeUnit,%20rx.Scheduler))
![delay](https://box.kancloud.cn/7a1f56b0ccba264aed927414733e213e_1280x620.png)
还有一个版本的`delaySubscription`使用一个Obseable而不是一个固定的时长来设置订阅延时。
这种`delaySubscription `默认不在任何特定的调度器上执行。
* Javadoc: [delaySubscription(Func0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#delaySubscription(rx.functions.Func0))
- 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模块
- 参与开发
- 补充阅读材料