1

我想知道如何将 a 转换List[Future[String\/String]]Future[String\/String].

其实我只是想申请list的每个元素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和函数的参数列表(包含 n 个元素)设置为输入fun(此处为 : List(arg1, arg2, arg3))。

但我不知道如何使用期货进行管理。是否可以保持异步?

4

1 回答 1

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")
        }
}

它没有我想要的那么好,但它似乎有效。如果有人知道最好的方法...

于 2015-06-02T09:08:35.630 回答