android - RXKotlin 中断 doOnNext 并调用另一个函数
问题描述
我正在使用 rx kotlin,但还没有完全理解。我正在尝试遍历查询列表,并一一执行它们。在这个列表中,我有一个特殊的字符串,一旦达到,我想打破循环并执行另一个功能
我怎么能在下面的例子中做到这一点?
fun runQueries() {
Observable.fromIterable(queriesTemp)
.subscribeOn(Schedulers.computation())
.doOnNext { query ->
if (query.contains("COMPLETION OF SDF QUERIES")) {
if (loginStatus == StaticVariables.FT_CASE_NEW_LOGIN) {
tasksQueriesTemp = arrayOfNulls(queries.size - queries.indexOf(query))
System.arraycopy(queries, queries.indexOf(query), tasksQueriesTemp, 0, tasksQueriesTemp!!.size)
}
// break the loop here
runOtherQueries()
break
}
if (!TextUtils.isEmpty(query)) {
mDatabase.execSQL(query, false, "")
}
action(tasksQueriesTemp!!.indexOf(query))
}
.doOnComplete { executeOtherUpdates(tasksQueriesTemp) }
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
}
fun runOtherQueries() {
}
解决方案
doOnNext
从使用中分解出您想要打破的部分takeWhile
:
val broken = AtomicBoolean();
Observable.fromIterable(queriesTemp)
.subscribeOn(Schedulers.computation())
.takeWhile { query ->
if (query.contains("COMPLETION OF SDF QUERIES")) {
if (loginStatus == StaticVariables.FT_CASE_NEW_LOGIN) {
tasksQueriesTemp = arrayOfNulls(queries.size -
queries.indexOf(query))
System.arraycopy(queries, queries.indexOf(query),
tasksQueriesTemp, 0, tasksQueriesTemp!!.size)
}
// break the loop here
runOtherQueries()
broken.set(true)
return@takeWhile false // whatever the Kotlin syntax is for local returns
}
return@takeWhile true
}
.doOnNext { query ->
if (!TextUtils.isEmpty(query)) {
mDatabase.execSQL(query, false, "")
}
action(tasksQueriesTemp!!.indexOf(query))
}
.doOnComplete {
// if you don't want to execute the other updates if the code
// in takeWhile has "broken out of the loop"
if (!broken.get())
executeOtherUpdates(tasksQueriesTemp)
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
推荐阅读
- python - Python Tkinter:按钮不可滚动
- google-api - 当 API 没有记录时,Google GA4 batchRunReports 抛出 500(内部服务器错误)
- scala - 如何使用 ZIO(具有持久层)创建具有“传统”接口的小型库
- javascript - 如何退出函数和 addEventListener?返回不工作?
- javascript - 使用 react js 从用户输入中创建 json 数组
- arrays - 使用数组比较列值 - PostgreSQL
- reactjs - 在单个组件类组件中反应本机多个操作表在 android 中工作正常但在 ios 中不起作用
- javascript - 我无法使用 javascript 在表格中插入单元格
- kotlin - 如何在tornadofx中获取鼠标按住事件
- c++ - 如何将c ++中指针指向的数据保存到txt文件?