所以我有一个返回 Vavr 的方法Try
:
public Try<Result> request() {...}
request
来自我无法修改的来源。目前,我对结果进行平面映射,request
并根据是否Result
有错误返回Try
异常或成功返回来自以下的数据Result
:
public Try<Data> fetchData() {
return request().flatMap(result -> {
if (result.hasError()) {
return Try.failure(new FailedRequestException());
} else {
return Try.success(result.data());
}
});
}
我想要的是在某些地方fetchData
首先使用数据,如果Try
成功,如果失败,则记录错误,如果错误是 a FailedRequestException
,否则,除异常外,执行其他操作,如下所示:
fetchData().andThen(data -> ...).onFailure(ex -> {
if (ex instanceOf FailedRequestException) {
log.error("Could not fetch data: " + ex.getMessage());
} else {
// Do something with the exception
...
}
});
我对这种方法的问题是fetchData
返回 aTry
所以调用者无法知道 aFailedRequestException
是可能失败的一部分。我可以让fetchData
return aTry<Either<FailedRequestException, Data>>
但这也感觉不对。有没有办法以更优雅的方式完成上述操作?我也尝试使用Match
andCase
但Case
期望 aFunction
作为处理程序而不是Consumer
.