Обработка исключений в проекте Compose Multiplatform на платформе Kotlin/Wasm
Проблема
Здравствуйте! Я пытаюсь создать диалоговое окно, которой будет появляться, когда выбрасывается исключение из кода Kotlin/Wasm. Пример исключения:
Button(
onClick = {
throw DebugException("Exception for debugging :)")
}
) {
Text(text = "Throw an exception (developers only)")
}
class DebugException(message: String) : Exception(message)
DebugException: Exception for debugging :)
kotlinx.coroutines.error_$external_fun @ composeApp.uninstantiated.mjs:187
$kotlinx.coroutines.error_$external_fun__externalAdapter @ b31441b….wasm:0x45636a
$kotlinx.coroutines.internal.propagateExceptionFinalResort @ b31441b….wasm:0x456c38
$kotlinx.coroutines.internal.handleUncaughtCoroutineException @ b31441b….wasm:0x44a498
$kotlinx.coroutines.handleCoroutineException @ b31441b….wasm:0x4292b3
$kotlinx.coroutines.StandaloneCoroutine.handleJobException @ b31441b….wasm:0x425835
$kotlinx.coroutines.JobSupport.finalizeFinishingState @ b31441b….wasm:0x42c8be
$kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath @ b31441b….wasm:0x42edf6
$kotlinx.coroutines.JobSupport.tryMakeCompleting @ b31441b….wasm:0x42ebc1
$kotlinx.coroutines.JobSupport.makeCompletingOnce @ b31441b….wasm:0x42ea7b
$kotlinx.coroutines.AbstractCoroutine.resumeWith @ b31441b….wasm:0x425306
$kotlin.coroutines.CoroutineImpl.resumeWith @ b31441b….wasm:0x3ac570
$kotlinx.coroutines.DispatchedTask.run @ b31441b….wasm:0x44bd26
$androidx.compose.ui.platform.FlushCoroutineDispatcher$flush$lambda.invoke @ b31441b….wasm:0x62cd17
$androidx.compose.ui.platform.FlushCoroutineDispatcher$flush$lambda.invoke @ b31441b….wasm:0x62cd43
$androidx.compose.ui.platform.FlushCoroutineDispatcher.performRun @ b31441b….wasm:0x62d402
$androidx.compose.ui.platform.FlushCoroutineDispatcher.flush @ b31441b….wasm:0x62d399
$androidx.compose.ui.scene.ComposeSceneRecomposer.performScheduledEffects @ b31441b….wasm:0x63b830
$androidx.compose.ui.scene.BaseComposeScene.sendPointerEvent @ b31441b….wasm:0x633db0
$androidx.compose.ui.scene.ComposeScene.sendPointerEvent$default @ b31441b….wasm:0x638995
$androidx.compose.ui.window.ComposeWindow.onMouseEvent @ b31441b….wasm:0x64705d
$androidx.compose.ui.window.ComposeWindow$initEvents$lambda.invoke @ b31441b….wasm:0x645900
$androidx.compose.ui.window.ComposeWindow$initEvents$lambda.invoke @ b31441b….wasm:0x645926
$androidx.compose.ui.window.ComposeWindow$addTypedEvent$lambda.invoke @ b31441b….wasm:0x645545
$androidx.compose.ui.window.ComposeWindow$addTypedEvent$lambda.invoke @ b31441b….wasm:0x64556f
$org.w3c.dom.encryptedmedia.__callFunction_((Js)->Unit) @ b31441b….wasm:0x45a223
eval @ composeApp.uninstantiated.mjs
Я пробовал:
Использовать событие
error
:onerror = (e) => { // код }
Перезаписать функцию
console.error
:const error = console.error console.error = (e) => { error(e) // код }
try
-catch
в классеMain
@OptIn(ExperimentalComposeUiApi::class) fun main() { try { ComposeViewport(document.body!!) { MainScreen() } } catch (e: Throwable) { e.printStackTrace() document.getElementById("err_overlay")!!.apply { this as HTMLDivElement style.display = "flex"; classList.add("open"); val errorMessage = document.getElementById("err_code") as HTMLPreElement; errorMessage.textContent = e.stackTraceToString(); } } }
Вопрос
Как правильно обработать исключение, выброшенное из кода Kotlin/Wasm?
Если что-то не так, пожалуйста, поправьте меня.