Scala 多次呼叫以获得收益
我不明白如何在Scala 多次呼叫以获得收益,scala,future,Scala,Future,我不明白如何在中的每个元素上调用我的函数doSomething(),以便理解并使用futures进行管理,因为这里有.map 我不确定这样做的好方法是什么。是否将用于理解与doSomething()一起使用 def myFunc(操作(id:List[ids]):Future[MyBean]={ 为了{ 第一 myDAO.doSomething(id) } 这一行之后的第二个: ids.map{ id => myDAO.doSomething(id) } 您将获得
中的每个元素上调用我的函数doSomething()
,以便理解并使用futures进行管理,因为这里有.map
我不确定这样做的好方法是什么。是否将用于理解与doSomething()
一起使用
def myFunc(操作(id:List[ids]):Future[MyBean]={
为了{
第一
myDAO.doSomething(id)
}
这一行之后的第二个:
ids.map{ id =>
myDAO.doSomething(id)
}
您将获得期货列表list[Future[A]]
。要将其与另一个期货进行平面映射,您需要将其转换为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)
}
用于{
第一个myDAO.doSomething(id)))
第二,如果你想为每个id调用doSomeghing
,那么你会有很多first
值,那么MyBean需要一个未来列表,或者你想创建很多MyBean?
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)
}