我正在尝试在下面的函数中实现错误处理。我的问题是每次我使用 MyValue 作为参数时,我都需要打开 Future[Either[Exception,MyValue]] 并测试“正确”。
如果 f1 到 f4 中的任何一个失败,策略是让 Future.flow 失败。
一种解决方案是将 Either[Exception,MyValue] 作为参数传递给 funcReturnFutureEitherX(),就像 funcReturnFutureEither3(f2()) 一样,但这只是向下传播错误处理,而不是在主程序 MyFlowFunc() 中处理它。
如何在下面的函数中实现错误处理并保持它运行无阻塞?
def MyFlowFunc():Future[(MyValue,MyValue,MyValue,MyValue)] =
val v = Future.flow {
// fail flow if below functions fails with a Either.Left()
val f1 = funcReturnFutureEither1()
val f2 = funcReturnFutureEither2(f1())
val f3 = funcReturnFutureEither3(f2())
val f4 = funcReturnFutureEither4(f1())
val res = (f1(),f2(),f3(),f4())
}
}
def funcReturnEitherX(val:MyValue):Future[Either[Exception,MyValue]]