gpt4 book ai didi

kotlin - 如何以 react 方式使用 Kotlin Flow 实现 RxJava 间隔/无限计数器?

转载 作者:行者123 更新时间:2023-12-02 12:56:17 30 4
gpt4 key购买 nike

RxJava 间隔的间隔对应物,具有延迟和时间单位的无限计数器,如何以 react 方式用 Flow 实现?取消机制应该如何工作,因为取消流程的唯一方法是取消协程的范围或工作,并且在取消协程之后它不起作用?

最佳答案

我做了一个 RxJava 区间的简单实现。

fun interval(timeInMillis: Long, timeUnit: TimeUnit): Flow<Long> = flow {

var counter: Long = 0

val delayTime = when (timeUnit) {
TimeUnit.MICROSECONDS -> timeInMillis / 1000
TimeUnit.NANOSECONDS -> timeInMillis / 1_000_000
TimeUnit.SECONDS -> timeInMillis * 1000
TimeUnit.MINUTES -> 60 * timeInMillis * 1000
TimeUnit.HOURS -> 60 * 60 * timeInMillis * 1000
TimeUnit.DAYS -> 24 * 60 * 60 * timeInMillis * 1000
else -> timeInMillis
}

while (true) {
delay(delayTime)
emit(counter++)
}

}

并将其与 launchIn 一起使用以拥有 job类似于 disposable .
val coroutineScope = CoroutineScope(SupervisorJob())

val job = coroutineScope.launch {
val job = interval(1, TimeUnit.SECONDS)
.onStart {
emit(-1)
}
.onEach {
println(it)
}
.map {
"Current time $it"
}
.launchIn(coroutineScope)

}

用过另一个 coroutineScope不取消其他 jobs现有的 coroutineScope , 当一个 coroutineScope.cancel()或者作业的取消功能属于coroutineScope被取消的作业无法再次启动。

当然,这个答案可能会有所改进或更好,我不接受。

关于kotlin - 如何以 react 方式使用 Kotlin Flow 实现 RxJava 间隔/无限计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62058805/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com