12

メソッドを呼び出してもどこにObervable.subscribe(Action1)もスローされないことを達成したいのですが、を呼び出すと、通常どおりエラーが発生したときに2番目のアクションが呼び出されます。私は2つの方法を試しました:OnErrorNotImplementedExceptionObervable.subscribe(Action1, Action1)

.onErrorResumeNext(Observable.empty())

この方法OnErrorNotImplementedExceptionはスローされませんが、2 番目のアクションも渡すと、アクションも呼び出されません。

2番:

.lift(new Observable.Operator<T, T>() {
    @Override
    public Subscriber<? super T> call(Subscriber<? super T> subscriber) {
        return new Subscriber<T>() {
            @Override
            public void onCompleted() {
                if (!subscriber.isUnsubscribed()) {
                    subscriber.onCompleted();
                }
            }

            @Override
            public void onError(Throwable e) {
                if (!subscriber.isUnsubscribed()) {
                    try {
                        subscriber.onError(e);
                    } catch (Throwable t) {
                        if (!(t instanceof OnErrorNotImplementedException)) {
                            throw t;
                        }
                    }
                }
            }

            @Override
            public void onNext(T t) {
                if (!isUnsubscribed()) {
                    subscriber.onNext(t);
                }
            }
        };
    }
});

これの問題observeOn()は、後で呼び出された場合、これは非同期になり、ここでの例外処理は明らかに機能しません。

これを達成する方法はありますか。をsubscribe()投げないメソッドがあればいいのにと思います。OnErrorNotImplementedExceptiononError

4

5 に答える 5