首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UseCase与仓库中的挂起

UseCase与仓库中的挂起
EN

Stack Overflow用户
提问于 2022-06-09 06:21:33
回答 1查看 185关注 0票数 0

我有个愚蠢的问题……但我找不到情报。

我已经创建了一个Repository.kt,它使用Co-例程

守则如下:

代码语言:javascript
复制
        override suspend fun getChallenge(): AwsResult<String> {
                return awsApi.getChallenge()
        }

AwsAPI部分如下所示:

代码语言:javascript
复制
override suspend fun getChallenge(): AwsResult<String> {
       ....

        return withContext(Dispatchers.IO) {
            try {
                val reponse: ... => API call through SDK
                AwsResult.onSuccess(reponse.text)
            } catch (e: Exception) {
                AwsResult.onError(e)
            }
        }
    }

我已经创建了一个ChallengeUseCase.kt,它将在将结果发送回ViewModel之前包含一些逻辑缺陷。

代码语言:javascript
复制
     suspend fun registerDevice(): Result<String> {
        try {
            val result = repository.getChallenge()
        } catch (e: Exception) {

        }
    }

AwsResult看起来是这样的:

代码语言:javascript
复制
sealed class AwsResult<out R> {
    data class onSuccess<out T>(val data: T) : AwsResult<T>()
    data class onError(val exception: Exception) : AwsResult<Nothing>()
}

我想知道如何在用例文件中捕获AwsResult?目标是提取一个信息,对它做一些事情,并将实现的业务逻辑的结果发送回viewModel。我假设result不会立即包含这些信息,而且我可能必须定义一个范围或围绕它的什么东西。

当我说,假设结果不会立即包含信息时,这是因为我试图在onSuccessonResult中捕获UseCase.kt

知道吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-09 19:08:07

您可以使用onSuccess运算符提取onErroronError,并检查返回的result的类型。

代码语言:javascript
复制
suspend fun registerDevice(): Result<String> {
    try {
        val result: AwsResult<String> = repository.getChallenge()
        when (result) {
            is AwsResult.onSuccess -> {
                val data = result.data
                // ... do something when request is success
            }
            is AwsResult.onError -> {
                val exception = result.exception
                // ... do something when request is error
            }
        }
        
    } catch (e: Exception) {

    }
}

另外,我不建议用一个小字母来命名Kotlin类,好的方式是用一个大字母来命名类:

代码语言:javascript
复制
sealed class AwsResult<out R> {
    data class Success<out T>(val data: T) : AwsResult<T>()
    data class Error(val exception: Exception) : AwsResult<Nothing>()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72555544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档