我不明白如何doSomething()
在的每个元素上调用我的函数,以及如何for comprehension
使用Future进行管理.map
。
我不确定执行此操作的好方法。难道不使用for comprehension
带doSomething()
?
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 {...}
在此行之后:
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] 删除。
我来说两句