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