Исключение никогда не перехватывается, потому что оно никогда не передается вызовом async
. Это происходит, когда вызывается await()
.
См. Обработка исключений сопрограммы .
Ваш код должен быть:
// somewhere in my UI testing it.
try {
PromiseUtil.promisify { throw Exception("some exp") }
.then { Log.d("SOME_TAG", "Unreachable code.") }.await() // <--- added await() call
} catch (e: Exception) {
Log.d("ERROR_TAG", "It should catch the error here but it doesn't.")
}
Но это не скомпилируется, так как await()
является функцией приостановки. Следовательно, это должно быть больше похоже на:
// somewhere in my UI testing it.
GlobalScope.launch(CoroutineExceptionHandler { coroutineContext, throwable ->
Log.d("ERROR_TAG", "It will catch error here")
throwable.printStackTrace()
}) {
PromiseUtil.promisify { throw Exception("some exp") }
.then { Log.d("SOME_TAG", "Unreachable code.") }.await()
}