kotlin - 单带流动?
问题描述
在 rxJava2 Kotlin 中尝试将 Single 与 Flowable 相结合,但没有发生任何事情:不明白什么问题
Flowable.create<Int>({ emmit ->
loadNewListener = object :Listener {
override fun onEmit(id: Int) {
emmit.onNext(id)
}
}
}, BackpressureStrategy.LATEST)
.debounce(500, TimeUnit.MILLISECONDS)
.flatMapSingle {
loadNew(id = it.id)
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ (data:Data) ->
}, {
Timber.e("Failed load data ${it.message}")
})
我的方法是返回单:
private fun loadNew(id: Int): Single<Data> {
return when (pdfType) {
CASE_0 -> {
Single.create<Data> { emmit ->
service.get("data")
.enqueue(
object : Callback<Void> {
override fun onFailure(call: Call<Void>?, t: Throwable?) {
// failure
}
override fun onResponse(call: Call<Void>?, response: Response<Void>?) {
emmit.onSuccess(it.data)
}
}
}//single
}//case_0
CASE_1 -> 1Repository.loadsome1Rx(id = id).map { it.getData() }
CASE_2 -> 2Repository.loadsom2LocalRx(id = id).map { it.getData() }
else -> {
throw java.lang.RuntimeException("$this is not available type!")
}
}
我的代码有什么问题?需要像这样在 Flowable subscribe() 中单独调用 Maby 吗?
Flowable.create<Int>({ emmit ->
loadNewListener = object :Listener {
override fun onEmit(id: Int) {
emmit.onNext(id)
}
}
}, BackpressureStrategy.LATEST)
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe({
loadNew(id = it.id)
}, {
Timber.e("")
})
这段代码可以工作,但看起来并不像通过组合尝试那样简单。
解决方案
这个基于您的代码的简单示例正在运行
var i = 0
fun foo() {
Flowable.create<Int>({ emmit ->
emmit.onNext(i)
i++
}, BackpressureStrategy.LATEST)
.debounce(500, TimeUnit.MILLISECONDS)
.flatMapSingle {
Single.create<String> { emmit ->
emmit.onSuccess("onSuccess: $it")
}
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
Log.i("RX", "Subscribe: $it")
}, {
it.printStackTrace()
})
}
检查SingleEmitter.onSuccess()
并SingleEmitter.onError()
在所有情况下调用when (pdfType)...
推荐阅读
- react-native - 分析数据未显示在 Firebase 控制台中
- kubernetes - 是否可以在 gcp 永久磁盘上编辑文件?
- azure - 在可能存在多个选项的情况下,如何创建策略以强制标记?
- java - ArrayDeque<>(int capacity) - Scanner.nextInt() == 4 和 (int) 4 有什么区别?
- python - button.when_pressed 中引用函数的返回值
- javascript - 无法使用 JSON 数据作为图表的输入在 Codeigniter 页面上显示 Morris.JS 图表
- javascript - 使用 Fetch API 调用带有 Auth Token 的 URL
- java - 有没有办法通过硒自动化在gmail中撰写邮件?
- swift - 如何将空输入值更改为空数组?
- sql - 在 postgres 中转换时间戳格式