我有一个方法,可以将分页数据模型转换为 UIModel。
pagingData
.map { cachedData ->
deserialize(cachedData)
}
.filter {
it.isSuccess
}
.map { it ->
mapToUiModel(it.getOrThrow())
}
代码有 2 个潜在的断点,第一个是反序列化发生时,第二个是 getOrThrow() 发生时。
如果我在其末尾放置 .catch { } ,它不会捕获,因为 PagingData 转换发生在另一个线程上,如果我放置 try catch,也不会捕获。
有什么建议吗?
谢谢,
您的
deserialize
返回一个 Result
,我认为它封装了反序列化期间发生的任何错误。然后你filter
出所有失败的Result
,这意味着getOrThrow
永远不会真正抛出。
所以,如果你想处理反序列化错误,你只需要在过滤之前分析
Result
即可。
pagingData
.map { cachedData ->
deserialize(cachedData)
}
.filter {
it.exceptionOrNull()?.let { e ->
println("Deserialize error $e")
}
it.isSuccess
}
.map { it ->
mapToUiModel(it.getOrThrow())
}