【发布时间】:2021-05-29 02:11:56
【问题描述】:
首先,我以前从未使用过 RxJava。对于所提供的所有用例和示例,我必须实现一个使用 AndroidRx 或 RxJava 的 SDK。
我有以下方法从后端返回数据
override suspend fun getSomeData(token: String): Outcome<String, DataError> {
val getSomeDataMutation = GetSomeDataMutation(token)
try {
val response = apolloClient.mutate(getSomeDataMutation).await()
return if (response.data?.someData != null) {
Outcome.success(response.data!!.someData)
} else {
Outcome.error(DataError.AN_ERROR(R.string.error))
}
} catch(...)
现在我正在尝试实现如下所示的方法,以使用 RxJava 与 SDK 交互,这将在 flatmap 中调用上述方法(基于示例)。 这甚至可能吗? 我已经尝试了几个小时,但没有任何成功。如果我修改上述方法以返回 SingleSource,它会起作用,但我不能这样做。
TheSDK.requestToken()
.rx()
.flatMap { token ->
network.getSomeData(token) //this part is causing the problem
}
.flatMap { networkResult->
return@flatMap TheSDK.session(SomeResponse.with(apiResult)).rx()
}
.subscribe { sessResult, throwable ->
if (sessResult!= null) {
if (sessResult.isSuccessful) {
// success
} else {
// something wrong
}
} else {
//an error occurred during the stream
}
}
【问题讨论】:
标签: android kotlin rx-java kotlin-coroutines