注冊一個動作作為原始Observable生命周期事件的一種占位符
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/do.c.png" alt="do" />
你可以注冊回調,當Observable的某個事件發(fā)生時,Rx會在與Observable鏈關聯(lián)的正常通知集合中調用它。Rx實現(xiàn)了多種操作符用于達到這個目的。
RxJava實現(xiàn)了很多Do
操作符的變體。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnEach.png" alt="doOnEach" />
doOnEach
操作符讓你可以注冊一個回調,它產生的Observable每發(fā)射一項數據就會調用它一次。你可以以Action
的形式傳遞參數給它,這個Action接受一個onNext
的變體Notification
作為它的唯一參數,你也可以傳遞一個Observable給doOnEach
,這個Observable的onNext
會被調用,就好像它訂閱了原始的Observable一樣。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnNext.png" alt="doOnNext" />
doOnNext
操作符類似于doOnEach(Action1)
,但是它的Action不是接受一個Notification
參數,而是接受發(fā)射的數據項。
示例代碼
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
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnSubscribe.png" alt="doOnSubscribe" />
doOnSubscribe
操作符注冊一個動作,當觀察者訂閱它生成的Observable它就會被調用。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnUnsubscribe.png" alt="doOnUnsubscribe" />
doOnUnsubscribe
操作符注冊一個動作,當觀察者取消訂閱它生成的Observable它就會被調用。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnCompleted.png" alt="doOnCompleted" />
doOnCompleted
操作符注冊一個動作,當它產生的Observable正常終止調用onCompleted
時會被調用。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnError.png" alt="doOnError" />
doOnError
操作符注冊一個動作,當它產生的Observable異常終止調用onError
時會被調用。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/doOnTerminate.png" alt="doOnTerminate" />
doOnTerminate
操作符注冊一個動作,當它產生的Observable終止之前會被調用,無論是正常還是異常終止。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/finallyDo.png" alt="finallyDo" />
finallyDo
操作符注冊一個動作,當它產生的Observable終止之后會被調用,無論是正常還是異常終止。