RxJava Observable 错误从数据库中获取项目但仍然传递错误
RxJava Observable on error fetch items from database but still pass error through
在我的应用程序中,我正在从 api 获取数据,如果这样做时出现错误,我想从数据库获取数据,但也会在屏幕上显示错误消息。
所以我想这样做的方式是使用 onErrorResumeNext
之类的东西。我可以使用它从数据库中获取数据,但问题是 onError
没有被调用,我无法向用户显示错误消息。所以我的代码是:
override fun getData(): Observable<List<MyData>> {
return getDataFromApi().onErrorResumeNext(getDataFromDatabase())
}
我怎样才能以某种方式在出错时获取数据库并同时知道需要显示错误消息?
您可以将域建模方式更改为如下所示:
sealed class Result {
class Simple(data: List<MyData>) : Result()
class HasError(data: List<MyData>, throwable: Throwable) : Result()
}
那么你可以这样做:
fun getResult(): Observable<Result> {
return getDataFromApi().map<Result> { Result.Simple(it) }
.onErrorResumeNext { throwable ->
getDataFromDatabase().map { myDataList ->
Result.HasError(
myDataList,
throwable
)
}
}
}
在我的应用程序中,我正在从 api 获取数据,如果这样做时出现错误,我想从数据库获取数据,但也会在屏幕上显示错误消息。
所以我想这样做的方式是使用 onErrorResumeNext
之类的东西。我可以使用它从数据库中获取数据,但问题是 onError
没有被调用,我无法向用户显示错误消息。所以我的代码是:
override fun getData(): Observable<List<MyData>> {
return getDataFromApi().onErrorResumeNext(getDataFromDatabase())
}
我怎样才能以某种方式在出错时获取数据库并同时知道需要显示错误消息?
您可以将域建模方式更改为如下所示:
sealed class Result {
class Simple(data: List<MyData>) : Result()
class HasError(data: List<MyData>, throwable: Throwable) : Result()
}
那么你可以这样做:
fun getResult(): Observable<Result> {
return getDataFromApi().map<Result> { Result.Simple(it) }
.onErrorResumeNext { throwable ->
getDataFromDatabase().map { myDataList ->
Result.HasError(
myDataList,
throwable
)
}
}
}