2017-06-19 217 views
0

我最近开始使用RxJava 2,并且想知道在调用Completable.blockingAwait()时是否可以捕获更具体的异常。使用Completable.blockingAwait()时捕获异常

这是我在做什么:

try { 

    Completable.create(new CompletableOnSubscribe() { 
    @Override 
    public void subscribe(@NonNull CompletableEmitter e) throws Exception { 
     e.onError(new IOException()); 
    } 
    }).blockingAwait(); 

} catch (RuntimeException e) { 
    Throwable cause = e.getCause(); 

    if(cause instanceof IOException) { 
     // Handle IOException 
    } 
} 

这是我想要做的是什么:

try { 

    Completable.create(new CompletableOnSubscribe() { 
    @Override 
    public void subscribe(@NonNull CompletableEmitter e) throws Exception { 
     e.onError(new IOException()); 
    } 
    }).blockingAwait(); 

} catch (IOException e) { 
    // Handle IOException 
} 

是否有可能使这项工作?

回答

0

一对情侣在链接的Javadoc线下来的存在blockingGet运算符返回一个Throwable,你可以做instanceof检查有:所以,为了区分返回/抛出的异常,我不得不使用

Throwable err = Completable.error(new IOException()).blockingGet(); 
if (err instanceof IOException) { 
    // ... 
} 
+0

'instanceof'?我是对的,[Single.blockingGet()'](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Single.html#blockingGet())没有其他选择。捕获'RuntimeException'并使用'instanceof'进行错误处理? –

+0

'blockingGet'不会抛出并手动抛出返回的错误看起来有点尴尬。 – akarnokd