如何在异常后恢复流程 [英] How to resume flow after exception
本文介绍了如何在异常后恢复流程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码:
val channel = BroadcastChannel<Event>(10)
fun setup() {
scope.launch {
channel.asFlow().
.flatMapLatest { fetchSomeData() }
.catch { emit(DefaultData()) }
.onEach { handleData() }
.collect()
}
}
fun load() {
channel.offer(Event.Load)
}
如果fetchSomeData
失败并出现异常,catch
将捕获它,并传递一些默认数据。问题是,流本身被取消,并从频道的订阅者中删除。这意味着提供给频道的任何新事件都将被忽略,因为不再有任何订阅者。
有没有办法确保流程在发生异常时不会被取消?
推荐答案
您应该捕获fetchSomeData()的异常,因此将catch
从主流移到fetchSomeData():
scope.launch {
channel.asFlow().
.flatMapLatest { fetchSomeData().catch { emit(DefaultData()} }
.onEach { handleData() }
.collect()
}
这篇关于如何在异常后恢复流程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文