被动地倾听Rx Observable

时间:2017-07-20 11:54:13

标签: java rx-java rx-java2

考虑以下课程:

public class TestRepository {

    private TestApiService apiService = new TestApiService();

    public Observable<String> fetchString() {
        return apiService.stringFromApi();
    }

    public  Observable<String> listenToFetchStringPassively() {
        // ???
    }

}

调用fetchString()并订阅它将使用api服务从互联网上获取字符串。

我想要做的是拥有另一个可观察的东西,它不会主动获取某些内容,而是被动地“监听”由fetchString()返回的观察者发出的任何项目并转发它们。

我的方法是:

public class TestRepository {

    private TestApiService apiService = new TestApiService();
    private Subscriber<? super String> passiveSubscriber;

    public Observable<String> fetchString() {
        return apiService.stringFromApi()
                .doOnNext(new Action1<String>() {
                    public void call(String s) {

                        passiveSubscriber.onNext(s);

                    }
                })
                .doOnCompleted(new Action0() {
                    public void call() {

                        passiveSubscriber.onCompleted();

                    }
                }); 
    }

    public Observable<String> listenToFetchStringPassively() {
        return Observable.create(new Observable.OnSubscribe<String>() {
            public void call(Subscriber<? super String> subscriber) {

                passiveSubscriber = subscriber;

            }
        });
    }

}

哪个有效,但看起来很笨拙。是否有更优雅的方式实现这一目标?

0 个答案:

没有答案