多次调用以获得收益

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多次调用以获得收益相关的知识,希望对你有一定的参考价值。

由于这里的doSomething(),我不知道如何在for comprehension中的每个元素上调用函数.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 ...
答案

此行之后:

  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将被顺序调用,而不是并行调用。

以上是关于多次调用以获得收益的主要内容,如果未能解决你的问题,请参考以下文章

多臂赌博机

无法在没有动画的情况下呈现和关闭视图控制器并获得不平衡调用以开始/结束外观转换

现成组件,详细教程:Uniapp去除微信小程序顶部导航栏,但保留标题和返回按钮;组件经多次调优,近乎完美

在递归中使用基本情况多次获得相同的值

推送通知在android中获得多次

优化存储过程