## Do
注冊一個動作作為原始Observable生命周期事件的一種占位符

你可以注冊回調,當Observable的某個事件發生時,Rx會在與Observable鏈關聯的正常通知集合中調用它。Rx實現了多種操作符用于達到這個目的。
RxJava實現了很多`Do`操作符的變體。
### doOnEach

`doOnEach`操作符讓你可以注冊一個回調,它產生的Observable每發射一項數據就會調用它一次。你可以以`Action`的形式傳遞參數給它,這個Action接受一個`onNext`的變體`Notification`作為它的唯一參數,你也可以傳遞一個Observable給`doOnEach`,這個Observable的`onNext`會被調用,就好像它訂閱了原始的Observable一樣。
* Javadoc: [doOnEach(Action1)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnEach(rx.functions.Action1))
* Javadoc: [doOnEach(Observer)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnEach(rx.Observer))
### doOnNext

`doOnNext`操作符類似于`doOnEach(Action1)`,但是它的Action不是接受一個`Notification`參數,而是接受發射的數據項。
示例代碼
```java
Observable.just(1, 2, 3)
.doOnNext(new Action1<Integer>() {
@Override
public void call(Integer item) {
if( item > 1 ) {
throw new RuntimeException( "Item exceeds maximum value" );
}
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
```
輸出
```
Next: 1
Error: Item exceeds maximum value
```
### doOnSubscribe

`doOnSubscribe`操作符注冊一個動作,當觀察者訂閱它生成的Observable它就會被調用。
* Javadoc: [doOnSubscribe(Action0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnSubscribe(rx.functions.Action0))
### doOnUnsubscribe

`doOnUnsubscribe`操作符注冊一個動作,當觀察者取消訂閱它生成的Observable它就會被調用。
* Javadoc: [doOnUnsubscribe(Action0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnUnsubscribe(rx.functions.Action0))
### doOnCompleted

`doOnCompleted` 操作符注冊一個動作,當它產生的Observable正常終止調用`onCompleted`時會被調用。
* Javadoc: [doOnCompleted(Action0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnCompleted(rx.functions.Action0))
### doOnError

`doOnError` 操作符注冊一個動作,當它產生的Observable異常終止調用`onError`時會被調用。
* Javadoc: [doOnError(Action0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnError(rx.functions.Action1))
### doOnTerminate

`doOnTerminate` 操作符注冊一個動作,當它產生的Observable終止之前會被調用,無論是正常還是異常終止。
* Javadoc: [doOnTerminate(Action0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#doOnTerminate(rx.functions.Action0))
### finallyDo

`finallyDo` 操作符注冊一個動作,當它產生的Observable終止之后會被調用,無論是正常還是異常終止。
* Javadoc: [finallyDo(Action0)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#finallyDo(rx.functions.Action0))
- 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模塊
- 參與開發
- 補充閱讀材料