多次致电以获取收益

史蒂夫

我不明白如何doSomething()在的每个元素上调用我的函数以及如何for comprehension使用Future进行管理.map

我不确定执行此操作的好方法。难道不使用for comprehensiondoSomething()

def myFunc(tion(ids: List[Ids]): Future[MyBean] = {
  for {
    first <- ids.map{ id =>
      myDAO.doSomething(id)
    }
    second <- myDAO.doSomehtingElse(ids)
  } yield {
    MyBean(first, second)
  }
}

def doSomething(id: Id): Future[Long] = Future {...}
def doSomethingElse(ids: List[Id]): Future[Long] = Future {...}
尼基塔(Nikita Ryanov)

在此行之后:

  ids.map{ id =>
      myDAO.doSomething(id)
    }

您将获得期货清单List[Future[A]]为了能够将FlatMap与另一个未来一起使用,您需要将其转换为Future[List[A]]为此,您可以使用Future.sequence另外,您可以使用Future.traverse

Future.traverse(ids)(myDao.doSomething)

在这种情况下,您可以避免使用map

最后,可以按照以下步骤进行操作:

  for {
    first <- Future.sequence(ids.map(id => myDAO.doSomething(id)))
    second <- myDAO.doSomehtingElse(ids)
  } yield {
    MyBean(first, second)
  }

要么:

      for {
        first <- Future.traverse(ids)(myDAO.doSomething)
        second <- myDAO.doSomehtingElse(ids)
      } yield {
        MyBean(first, second)
  }

另外,请记住,myDAO.doSomehtingElse它将被顺序调用-而不是并行调用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章