gpt4 book ai didi

scala - 返回Future [A]的函数是否应该引发异常?

转载 作者:行者123 更新时间:2023-12-04 05:43:38 25 4
gpt4 key购买 nike

我遇到了返回Future但也立即引发异常的函数。例如这样的例子:

def func(): Future[String] {
if (something) {
// this
Future.failed(new RuntimeException("test"))
} else {
// and this
throw new RuntimeException("test")
}
}

这种行为对于调用者来说似乎很烦人,因为您必须执行以下操作才能捕获这两个错误:
try {
func() recover {
case e: Exception => handleError(e)
}
} catch {
case e: Exception => Future.successful(handleError(e)) //or Future.failed etc
}

我已经注意到play框架中的 WSClient可以做到这一点(如果URL格式错误,都将引发异常,如果HTTP请求失败,则返回 Future将会失败)。

这是好习惯吗?有没有更好的方法来处理此类行为的错误?

最佳答案

Future最终用于返回某些内容,但实际上何时返回尚不清楚。

从.NET角度来看(我们有Task):如果请求明显无效(例如格式错误的url),则应引发异常。在实际发出Web请求之前,您已经知道这一点,因此无需延迟异常(exception)。

另一方面,如果服务器已关闭(超时?)或服务器返回了客户端无法理解的内容:可以并且必须在以后的时间进行处理,因为在进行调用时响应不直接可用。我们将能够阻塞直到响应可用,但这会使Future变得无用。

我认为与“早期退出”编程风格相比,这是最好的选择。

关于scala - 返回Future [A]的函数是否应该引发异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802815/

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