当前位置: 首页 > 知识库问答 >
问题:

期货给我带来了一些困惑,尝试过的平面图身份

孙光临
2023-03-14

我在尝试编写一个返回Future[Map[Int,Long]]的方法时遇到了问题。

我正处于找回未来的反复过程中..]].所以我尝试了平面地图身份。

请参阅下面的代码和我现在收到的错误消息。我不确定目前这里发生了什么。

def aggregate(permissions: Vector[Permission]): Map[Int, Long]

def calculate(roleProfile: RoleProfile): Future[Map[Int, Long]] = {
  val roleIds = roleProfile.roles.map(r => r.id)
  db.run(permissionDao.getByRoles(roleIds.toList)).map {
    permissions =>
      aggregate(permissions)
  }
}

def generate(roleGroupId: Int): Future[Map[Int, Long]] = {
  for {
    roleGroup <- roleGroupService.getById(roleGroupId)
    roles <- roleGroupService.getRolesByGroupId(roleGroupId)
  } yield {
    calculate(RoleProfile(roleGroup.get.id, roles.toSet)) //flatMap identity
  }
}

我收到方法“calculate”的错误消息:

type mismatch;
[error]  found   : scala.concurrent.Future[Map[Int,Long]]
[error]  required: Map[Int,Long]
[error]       calculate(RoleProfile(roleGroup.get.id, roles.toSet)) //flatMap identity

现在,如果删除注释的平面图身份,我得到这个错误:

type mismatch;
[error]  found   : Map[Int,Long] => Map[Int,Long]
[error]  required: Map[Int,Long] => scala.concurrent.Future[?]
[error]       calculate(RoleProfile(roleGroup.get.id, roles.toSet)) flatMap identity

我很困惑,我怎样才能让它返回Future[Map[Int,Long]]。

更重要的是,这里发生了什么,我似乎不明白。如果你能很感激的话,请把事情分解一下。

共有1个答案

湛功
2023-03-14

由于计算,就像你的getById等调用一样,返回一个未来,你应该能够简单地将其添加到理解的主要部分,例如:

def generate(roleGroupId: Int): Future[Map[Int, Long]] = {
  for {
    roleGroup <- roleGroupService.getById(roleGroupId)
    roles <- roleGroupService.getRolesByGroupId(roleGroupId)
    profile <- calculate(RoleProfile(roleGroup.get.id, roles.toSet))
  } yield { profile }
}
 类似资料:
  • 1.首先,我想确认一下从编程的角度,我们有“静态类型检查”和“动态类型检查,对把? 2.一般情况下我们用typescript做静态类型检查,检查源码里面自定义数据类型,对把? 3.那么,我们做的所谓的动态类型检查是不是指的那些库,比如Joi,ajv什么的,比如你点击一个按钮,然后调这个库来检查一个obj的schema,如果类面的key value类型都能对的上,我们就通过,如果类型对不上,我们就报

  • 因此,将此运算符放在链中的任何位置也会影响onnext/onerror/oncomplete信号的执行*上下文,从链的开始直到下一次出现{@link publishOn(Scheduler)publishOn} 这让我有点困惑,因为当处理链中没有指定任何时,线程名称的打印值为: 从线程single-scheduler-1中保存person-如预期 从线程线程-13查找人员 从线程线程-6查找人员

  • 错误:线程“main”在调用<code>Result::unwrap()

  • 我试图在Redis上执行Spring中的函数。这让我犯了个错误。我已经成功实现了函数,但在实现时,它要求我将集合作为第二个参数。我不知道该进什么?有人能带我来吗。 这是我的multiGet()代码 方法定义: 控制器中的代码: 上面的Multiget方法的错误是 下面是Get函数的代码。 控制器中Get函数的代码:

  • ChatGPT 的出现在许多领域都带来了各种机遇。以下是其中几个重要的机遇

  • chatGPT是否取代人工的神器,1.挑战我们的工作岗位,2.挑战我们的教育,3.挑战我们人类的尊严,4.AIGC领域如何监管?,5.数据隐私和安全,6.技术依赖性