Peter
08/03/2021, 8:53 PMEither.catch
is strict in evaluating it’s supplied function, is there a way to catch an Exception from an effect? eg
suspend findThing(): Thing {}
Either.catch { findThing() } // ???
simon.vergauwen
08/03/2021, 9:05 PMPeter
08/03/2021, 9:06 PMcatch
isn’t inline or suspend?Peter
08/03/2021, 9:07 PMsimon.vergauwen
08/03/2021, 9:07 PMPeter
08/03/2021, 9:08 PMPeter
08/03/2021, 9:08 PMsimon.vergauwen
08/03/2021, 9:08 PMsimon.vergauwen
08/03/2021, 9:08 PMPeter
08/03/2021, 9:09 PMnewSuspendedTransaction
vs transaction
?simon.vergauwen
08/03/2021, 9:09 PMsimon.vergauwen
08/03/2021, 9:09 PMsimon.vergauwen
08/03/2021, 9:10 PMPeter
08/03/2021, 9:10 PMinline fun <R> catch(f: () -> R): Either<Throwable, R> =
f
is not marked inline
or suspend
simon.vergauwen
08/03/2021, 9:10 PMPeter
08/03/2021, 9:10 PMsimon.vergauwen
08/03/2021, 9:11 PMPeter
08/03/2021, 9:11 PMPeter
08/03/2021, 9:12 PMContractLifecycleTable.kt: (201, 21): Suspension functions can be called only within coroutine body
simon.vergauwen
08/03/2021, 9:12 PMPeter
08/03/2021, 9:12 PMPeter
08/03/2021, 9:13 PMsimon.vergauwen
08/03/2021, 9:14 PMsimon.vergauwen
08/03/2021, 9:14 PMPeter
08/03/2021, 9:15 PMsimon.vergauwen
08/03/2021, 9:15 PMPeter
08/03/2021, 9:15 PMsimon.vergauwen
08/03/2021, 9:15 PMsimon.vergauwen
08/03/2021, 9:16 PMPeter
08/03/2021, 9:16 PMsimon.vergauwen
08/03/2021, 9:18 PMPeter
08/03/2021, 9:18 PMPeter
08/03/2021, 9:18 PMPeter
08/03/2021, 9:18 PMPeter
08/03/2021, 9:18 PMorg.jetbrains.exposed.exceptions.ExposedSQLException: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 5004ms.
Peter
08/03/2021, 9:20 PMPeter
08/03/2021, 9:20 PMprivate suspend fun <T>runWithContextAndTransaction(block: Transaction.() -> T): Either<Throwable, T> {
return withContext(<http://Dispatchers.IO|Dispatchers.IO>) {
retrying(
defaultRetryPolicy,
::eitherDecider,
onRetry = logRetry(logger, defaultRetryPolicy),
) {
Either.catch {
newSuspendedTransaction {
block()
}
}
}
}
}
simon.vergauwen
08/03/2021, 9:24 PMPeter
08/03/2021, 9:25 PMsimon.vergauwen
08/03/2021, 9:25 PMCLOVIS
08/04/2021, 8:34 AMsuspend
? If it's not, then the error makes senseCLOVIS
08/04/2021, 8:36 AMfun foo() {
// outer function is not suspend
Either.catch {
// Therefore ‘catch’, despite being inline, can't suspend (it would be inlined in a non-suspending function)
whatever() // if this function is marked as ‘suspend’, it can't be called here
}
}