public void hystrix(String username){
/**
* R call();
*/
Func0<Observable<Object>> defer = new Func0<Observable<Object>>(){
@Override
public Observable<Object> call() {
System.out.println("4.username = " + username);
return Observable.just(2);
}
};
/**
* R call(T t);
*/
Func1<Object,Object> map = new Func1<Object,Object>(){
@Override
public Object call(Object observable) {
System.out.println("5.username = " + username);
if(observable instanceof Integer){
return ((Integer) observable)* 3;
}
return null;
}
};
Observable.defer(new Func0<Observable<Object>>() {
@Override
public Observable<Object> call() {
System.out.println("1.username = " + username);
return Observable.defer(new Func0<Observable<Object>>() {
@Override
public Observable<Object> call() {
System.out.println("2.username = " + username);
Observable rtn = Observable.defer(defer)
.map(map);
return rtn.doOnNext(new Action1() {
@Override
public void call(Object o) {
System.out.println("this is doOnNext 1");
}
});
// return rtn.doOnCompleted(new Action0() {
// @Override
// public void call() {
// System.out.println("3.username = " + username);
// }
// });
}
}).doOnNext(new Action1<Object>() {
@Override
public void call(Object o) {
System.out.println("this is doOnNext");
}
});
}
}).subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
System.out.println("this is onNext o = " + o);
}
});
}
1、doOnNext
public final Observable<T> doOnNext(final Action1<? super T> onNext) {
Action1<Throwable> onError = Actions.empty();
Action0 onCompleted = Actions.empty();
Observer<T> observer = new ActionObserver<T>(onNext, onError, onCompleted);
// this 指的是最近的upstream defer,也即source
return unsafeCreate(new OnSubscribeDoOnEach<T>(this, observer));
}
2、OnSubscribeDoOnEach
public OnSubscribeDoOnEach(Observable<T> source, Observer<? super T> doOnEachObserver) {
this.source = source;//source 指的是最近的upstream defer
this.doOnEachObserver = doOnEachObserver;
}
public void call(final Subscriber<? super T> subscriber) {
source.unsafeSubscribe(new DoOnEachSubscriber<T>(subscriber, doOnEachObserver));
}
针对其call的调用发现优先执行source的订阅。最终才会执行当前doOnNext的订阅。
3、Observable
public static <T> Observable<T> unsafeCreate(OnSubscribe<T> f) {
return new Observable<T>(RxJavaHooks.onCreate(f));
}
protected Observable(OnSubscribe<T> f) {
this.onSubscribe = f;//OnSubscribeDoOnEach
}