协程异步等待+改造+密封类

问题描述

我有2个API,第二个API取决于第一个API的结果。下面是viewmodel中的代码

fun coroutineDocs(jobRequest: JobRequest) {
    viewmodelScope.launch {
        _mResult.postValue(Resource.loading())
        withContext(dispatchers.IO) {
            try {
                coroutinescope {
                    val manifest = async {
                        manifestRepository.coroutinesendDocs(jobRequest)
                    }
                    val manifestResult = manifest.await()

                    val images = async {
                        manifestRepository.coroutineUploadAttachment(
                            userId,manifestResult.responseData?.transactionId
                        )
                    }
                    val imageResult = images.await()
                    _mResult.postValue(imageResult)
                }
            } catch (e: Exception) {
                _mResult.postValue(Resource.exception(e))
            }
        }
    }
}

我的网络解析代码如下:

data class Resource<out T>(
val status: Status,val responseData: T? = null,val headers: Headers?=null,val errorData: ResponseBody? = null,val responseCode: Int? = null,val exception: Exception? = null) {
companion object {
    fun <T> success(data: T?,header: Headers): Resource<T> =
        Resource(Status.SUCCESS,data,header)

    fun <T> error(responseCode: Int?,errorData: ResponseBody?): Resource<T> =
        Resource(Status.ERROR,errorData = errorData,responseCode = responseCode)

    fun <T> exception(exception: Exception?): Resource<T> =
        Resource(Status.EXCEPTION,exception = exception)

    fun <T> loading(): Resource<T> =
        Resource(Status.LOADING)
}

}

现在,我正在尝试将上述网络解析转换为如下所示的密封类:

sealed class Resource1<out T>{
class Loading<T> : Resource1<T>()
data class Success<T>(val data:T?,val header:Headers) : Resource1<T>()
data class Error<T>(val responseCode: Int?,val errorData: ResponseBody?) : Resource1<T>()
data class Failure<T>(val exception: Exception?):Resource1<T>()
companion object {
    fun <T> loading() = Loading<T>()
    fun <T> success(data: T?,header: Headers) = Success(data,header)
    fun <T> error(responseCode: Int?,errorData: ResponseBody?) =
        Error<T>(responseCode,errorData)
    fun <T> failure(exception: Exception?) = Failure<T>(exception)
}

}

由于我要更新为密封类,因此需要使用kotlin when()。

如何不使用kotlin when()直接获取manifestResult.responseData?.transactionId

预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)