Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理SyncOnSubscribe RxJava中generateState中的错误?_Java_Reactive Programming_Rx Java_Backpressure - Fatal编程技术网

如何处理SyncOnSubscribe RxJava中generateState中的错误?

如何处理SyncOnSubscribe RxJava中generateState中的错误?,java,reactive-programming,rx-java,backpressure,Java,Reactive Programming,Rx Java,Backpressure,我试图掌握创建SyncOnSubscribe的诀窍,但不太确定如果generateState方法在状态初始化期间失败,该怎么办 return Observable.create(new SyncOnSubscribe<MyState, String>() { @Override protected MyState generateState() { return new MyState(); // <---- what if this fai

我试图掌握创建SyncOnSubscribe的诀窍,但不太确定如果
generateState
方法在状态初始化期间失败,该怎么办

return Observable.create(new SyncOnSubscribe<MyState, String>() {
    @Override
    protected MyState generateState() {
        return new MyState();   // <---- what if this fails?
    }

    @Override
    protected MyState next(MyState state, Observer<? super String> observer) {
        // do something with state
    }
});

使用上面的
main
函数
getEventsOnSubscribe1
getEventsSyncOnSubscribe
都调用订阅者
onError
,但它们会使程序挂起。使用包装异常并手动调用
s.onError
geteventsonsubscribebe2
,程序可以退出。

这似乎是一个使用
SyncOnSubscribe
处理错误的错误。我会发布一个修复程序soon@akarnokd我可能弄错了,我似乎无法重现我之前看到的内容-程序没有退出可能是由于另一个库生成了守护进程线程。如果我再次看到这个问题,我会在这里回复。谢谢这似乎是处理
SyncOnSubscribe
的错误。我会发布一个修复程序soon@akarnokd我可能弄错了,我似乎无法重现我之前看到的内容-程序没有退出可能是由于另一个库生成了守护进程线程。如果我再次看到这个问题,我会在这里回复。谢谢
public static Observable<String> getEventsOnSubscribe1() {
    return Observable.create((s) -> {
        throw new UnsupportedOperationException("getEvents3");
    });
};

/** Like 'getEventsOnSubscribe1' but wrap exception and call onError manually.  */
public static Observable<String> getEventsOnSubscribe2() {
    return Observable.create((s) -> {
        try {
            throw new UnsupportedOperationException("getEvents3");
        } catch (Exception ex) {
            s.onError(ex);
        }
    });
};

public static Observable<String> getEventsSyncOnSubscribe() {
    return Observable.create(new SyncOnSubscribe<Channel, String>() {
        @Override
        protected Channel generateState() {
            System.out.println("SyncOnSubscribe.generateState");
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        protected Channel next(Channel state, Observer<? super String> observer) {
            System.out.println("SyncOnSubscribe.next");
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        protected void onUnsubscribe(Channel state) {
            System.out.println("SyncOnSubscribe.onUnsubscribe");
            throw new UnsupportedOperationException("Not supported yet.");
        }
    });
}

public static void main(String[] args) throws IOException, TimeoutException {
    getEventsOnSubscribe1()
    //getEventsOnSubscribe2()
    //getEventsOnSyncSubscribe()
            .toBlocking()
            .subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {
                    System.out.println("onCompleted");
                }

                @Override
                public void onError(Throwable e) {
                    System.out.println("onError: " + e.getLocalizedMessage());
                }

                @Override
                public void onNext(String t) {
                    System.out.println("onNext: " + t);
                }
            });
}