【问题标题】:Resubscribing an observable if timeout exception occurs如果发生超时异常,则重新订阅 observable
【发布时间】:2016-09-02 06:07:32
【问题描述】:

我正在使用改造来返回一个可观察的作为对服务器的 REST API 调用的结果。通常会发生请求超时异常并且 observable 停止执行。如果异常属于特定类型,如何重新订阅重试

myObservable
    .subscribe(new Subscriber<Something> sub(){
        @override
        void onNext(Something something){
            //do something with something
        }
                    @override
        void onError(Throwable e){
            //retry and resend call to server if e is request timeout exception
        }

【问题讨论】:

    标签: java android rx-java reactive-programming reactivex


    【解决方案1】:

    您可以使用retry 运算符。

    例子:

    myObservable
        .retry((retryCount, throwable) -> retryCount < 3 && throwable instanceof SocketTimeoutException)
        .subscribe(new Subscriber<Something> sub(){
            @override
            void onNext(Something something){
                //do something with something
            }
                        @override
            void onError(Throwable e){
    
            }
    

    在示例中,当有 SocketTimeoutException 最多 3 次时,它将重新订阅。

    或没有 lambda:

    myObservable
        .retry(new Func2<Integer, Throwable, Boolean>() {
                    @Override
                    public Boolean call(Integer retryCount, Throwable throwable) {
                        return retryCount < 3 && throwable instanceof SocketTimeoutException;
                    }
                })
        .subscribe(new Subscriber<Something> sub(){
            @override
            void onNext(Something something){
                //do something with something
            }
                        @override
            void onError(Throwable e){
    
            }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多