美文网首页
Rxjava_map源代码分析

Rxjava_map源代码分析

作者: 黑色海鸥 | 来源:发表于2018-02-08 18:38 被阅读4次

    ObservableA:
    Observable.create(new Observable.OnSubscribe<Integer>() {
    @Override
    public void call(Subscriber<? super Integer> subscriber) {
    subscriber.onNext(1);
    subscriber.onCompleted();
    }
    });

    ObservableB:
    .map(new Func1<Integer, String>() {
    @Override
    public String call(Integer integer) {
    return "This is " + integer;
    }
    })

    Subscriber_One:
    new Subscriber<String>() {
    @Override
    public void onCompleted() {
    System.out.println("onCompleted!");
    }
    @Override
    public void onError(Throwable e) {
    System.out.println(e.getMessage());
    }
    @Override
    public void onNext(String s) {
    System.out.println(s);
    }
    }

    ObservableB.subscribe(Subscriber_One)

    分析:
    ObservableB:
    call
    this.source = source; // ObservableA
    this.transformer = transformer;
    call(final Subscriber<? super R> o) {
    MapSubscriber<T, R> parent = new MapSubscriber<T, R>(o, transformer);
    //MapSubscriber的构造函数
    //this.actual = actual; Subscriber_One 对象
    // this.mapper = mapper; 就是真是的map方法
    o.add(parent);
    source.unsafeSubscribe(parent);// 调用ObservableA的call
    }

    ObservableA:
    call
    call(Subscriber<? super Integer> subscriber) {
    subscriber.onNext(1);
    subscriber.onCompleted();
    }
    看MapSubscriber的onNext方法:
    onNext(T t) {
    R result;
    try {
    result = mapper.call(t); //调用 mapper的call: "This is " + integer
    } catch (Throwable ex) {
    Exceptions.throwIfFatal(ex);
    unsubscribe();
    onError(OnErrorThrowable.addValueAsLastCause(ex, t));
    return;
    }
    actual.onNext(result); //actual Subscriber_One
    }

    相关文章

      网友评论

          本文标题:Rxjava_map源代码分析

          本文链接:https://www.haomeiwen.com/subject/ldzttftx.html