我想知道如何将List[Future[String\/String]]
转换为Future[String\/String]
。
事实上,我只想申请列表EitherT.apply
的每个元素。
我想要的是这样的:
val result: EitherT[Future, String, String] =
for{
_ <- EitherT.apply(fun(arg1))
_ <- EitherT.apply(fun(arg2))
res <- EitherT.apply(fun(arg3))
} yield res
result.run
// ...
def fun(arg1: MyType): Future[String\/String] = ...
在这个例子中,我想设置函数fun
和函数fun
的参数列表(n个元素)作为输入(这里:List(arg1, arg2, arg3)
)。< / p>
但我不知道如何管理期货。 是否可以保持异步?
答案 0 :(得分:0)
我找到了一种方法,但没有使用EitherT.apply。
def seqCheck(elements: List[Element]): Future[String\/String] = elements match {
case element :: tail =>
fun(element) flatMap {
case \/-(_) =>
seqCheck(tail)
case -\/(e) => Future{
-\/(e)
}
}
case Nil =>
Future {
\/-("Ok")
}
}
它不像我希望的那样好,但似乎有效。 如果有人知道最好的方式......