这种情况下如何将结果发送到ViewModel???
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
// TODO: error return to viewModel
} else if (token != null) {
// TODO: success return to viewModel
}
}
fun signInWithABC() {
abcApi.signIn(callback = callback)
}
我认为signInWithABC应该返回到ViewModel,而不是直接从回调返回...... 也许像这样..
fun signInWithABC(): Result<AuthData> {
return abcApi.signIn(callback = callback)
}
但是,我不知道该怎么做..
我应该这样修复它吗?不过看起来不太干净。
fun signInWithABC() {
abcApi.signIn(){ token, error ->
if (error != null) {
// TODO: error return to viewModel
} else if (token != null) {
// TODO: success return to viewModel
}
}
}
我也尝试过这个..但它有返回问题。 lamda 无法返回该函数的值。但只能返回区块..
fun signInWithABC(): Result<String> {
abcApi.signIn(){ token, error ->
if (error != null) {
return Result.failure<Throwable>(error)
} else if (token != null) {
return Result.success(token)
}
}
return Result.failure(throw IllegalAccessException())
}
您可能需要回调来暂停转换。 这是执行此操作的一个简单示例:
suspend fun signInWithABC(): String = suspendCoroutine { continuation ->
abcApi.signIn(){ token, error ->
if (error != null) {
continuation.resume("Error")
} else {
continuation.resume(token) // Assuming token is a string
}
}
}