我遇到了返回的函数,Future但也立即抛出异常.例如这样:
def func(): Future[String] {
if (something) {
// this
Future.failed(new RuntimeException("test"))
} else {
// and this
throw new RuntimeException("test")
}
}
Run Code Online (Sandbox Code Playgroud)
这种行为对调用者来说似乎很烦人,因为你必须做这样的事情来捕获这两个错误:
try {
func() recover {
case e: Exception => handleError(e)
}
} catch {
case e: Exception => Future.successful(handleError(e)) //or Future.failed etc
}
Run Code Online (Sandbox Code Playgroud)
我注意到WSClientin play框架执行此操作(如果URL格式错误则抛出异常,并且Future如果HTTP请求失败则返回失败).
这是好习惯吗?有没有更好的方法来处理来自这样的函数的错误?
Future 用于最终返回某些东西,但实际发生时却不清楚.
来自.NET的观点(我们有Task):如果请求明显无效(例如格式错误的URL),则应抛出异常.在实际发出Web请求之前,您已经知道了这一点,因此无需延迟异常.
另一方面,如果服务器关闭(超时?)或服务器返回客户端不理解的内容:这可以而且必须在以后处理,因为在进行调用时响应不可直接使用.我们可以阻止,直到响应可用,但这将使Future无用.
我认为这与"退出早期"编程风格相比是最好的.
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |