在Anko异步调用(Kotlin)中捕获异常时出错

我在一个Anko doAsync调用中使用Retrofit调用一个异步调用。 问题是,我不知道如何捕捉抛出execute()的IOException,基本上执行调用没有被调用。 如果我注释if (resultBody is T)行,并将调用放在trycatch它就像一个魅力。 有人知道为什么

 doAsync { val response = call.execute() uiThread { if (response.isSuccessful) { val resultBody = response.body() if (resultBody is T) callback.onSuccess(resultBody) } } } 

来自doAsync文档:

  • @param exceptionHandler可选的异常处理程序。 *如果定义,任何抛出[任务]的异常将被传递给它。 否则,异常将被忽略。

看起来你可以通过一个exceptionHandler来管理它们,或者用crashLogger来处理异常:

 private val crashLogger = { throwable : Throwable -> throwable.printStackTrace() } //... fun <T> T.doAsync( //... exceptionHandler: ((Throwable) -> Unit)? = crashLogger, //... ) 

你可以查看Anko doAsync的实现细节。