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