多次调用以获得收益
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多次调用以获得收益相关的知识,希望对你有一定的参考价值。
由于这里的doSomething()
,我不知道如何在for comprehension
中的每个元素上调用函数.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
将被顺序调用,而不是并行调用。
以上是关于多次调用以获得收益的主要内容,如果未能解决你的问题,请参考以下文章
无法在没有动画的情况下呈现和关闭视图控制器并获得不平衡调用以开始/结束外观转换