gpt4 book ai didi

java - toBlocking() 中的错误处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:22 25 4
gpt4 key购买 nike

我正在使用 RxJava 将应用程序重构为响应式范例。我正在逐步进行,所以我需要使用 toBlocking()在某些情况下,暂时为了尊重接口(interface)。使用时如何处理错误 toBlocking()

之前,我有这样的事情:

public List<Employee> getEmployees() {
try {
return repository.getEmployees();
} catch(Exception e) {
throw new MyCustomException();
}
}

现在,存储库有一个 react 接口(interface)(返回 Observable<List<Employee>> ),所以我这样做:

public List<Employee> getEmployees() {
return repository.getEmployees().toBlocking().single();
}

订阅 repository.getEmployees()可能返回错误 Observable .我的问题是:我该如何处理这个错误,让它一直处于阻塞状态?

我找到了一个方法singleOrDefault() , 但类似于 singleOrThrow(new MyCustomException())会很好。

最佳答案

你不能这样做,你需要用 try/catch block 包装它,toBlocking()Observable 转换为 BlockingObservable 这不完全是 react block ,更像是花哨的集合,它现在缺乏组合 Observables 的能力,运算符,控制线程/并行度,以及异步 API 的基本结构,内置错误处理,(onError())

关于 BlockingObservable 的文档说明:

It can be useful for testing and demo purposes, but is generally inappropriate for production applications (if you think you need to use a BlockingObservable this is usually a sign that you should rethink your design).

那么,阻塞 Observable 有什么意义呢?如果你不能将接口(interface)更改为 Observable,那么你可能会错过使用 Rx 和 Observable 的所有要点,这是(在理想情况下)抽象出每个基于事件的在系统中运行,然后能够使用 Operators/Composition/Async 管理的强大功能并在您的系统中构建事件流。
如果你只是用 Observable 包装一些 API 操作,然后将它返回到非 react 世界,那么 API 的消费者就无法享受 Rx 的所有上述好处。
所以,我认为你应该重新考虑这样做的目的是什么,你的最终目标是什么,你可以考虑在你的系统中的几个地方替换为 Reactive 方法作为开始。

关于java - toBlocking() 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786273/

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