I am new to KMM and coroutines. Is there a way to await for a response from an async function without needing to make the dependent function also suspend?
Code Example
// In HttpClient.kt in commonMain
class MyHttpClient {
val client = HttpClient()
suspend fun get(url: String): String {
client.get<String>(url)
}
}
// In Another class in commonMain
class Foo {
private val httpClient = MyHttpClient()
fun performAction() { <--- #1
val data = httpClient.get("server url")
// So stuff with that data after its retrieve from server.
}
}
// In iOS swift code
struct Example: View {
var body: some View {
Button {
foo.performAction() <--- #2
} label: {
Text("Click Me")
}
}
}
if i make #1 a suspend function #2 needs an unnecessary callback. example
// In iOS swift code
struct Example: View {
var body: some View {
Button {
foo.performAction(completionHandler: handler)
} label: {
Text("Click Me")
}
}
private func handler(response: KotlinUnit?, error: Error?) {
// DO NOTHING
}
}
Also my unit test fail because you cant make test suspend functions and runBlocking
isnt in commonMain.