【问题标题】:Type conversion from Unit to Future[Boolean]从单位到未来的类型转换[Boolean]
【发布时间】:2016-02-14 07:52:56
【问题描述】:

我有以下函数,我想返回Future[Boolean],但IDE提示我返回Unit。我是 Scala 的新手。有人可以指出我做错了什么吗?

def remove(loginInfo: LoginInfo): Future[Boolean] = {
  val result = findObject(loginInfo)

  result.onSuccess {

    case Some(persistentPasswordInfo) =>

      val removeResult = remove(persistentPasswordInfo._id.toString)

      removeResult.map {
        case Left(ex) => Future.successful(false)
        case Right(b) => Future.successful(b)
      }
    case None => Future.successful(false)

  }

}

【问题讨论】:

  • onSuccess 的返回类型是 Unit。 def onSuccess[U](pf: PartialFunction[T, U]): Unit
  • 你能指出我必须修改什么才能获得Future[Boolean]吗?

标签: scala silhouette


【解决方案1】:

onSuccess 替换为flatMap。假设您的 remove(x: String) 方法还返回一个 Future,这也需要是 flatMapped:

def remove(loginInfo: LoginInfo): Future[Boolean] = {
  val result = findObject(loginInfo)

  result.flatMap {

    case Some(persistentPasswordInfo) =>

      val removeResult = remove(persistentPasswordInfo._id.toString)

      removeResult.flatMap {
        case Left(ex) => Future.successful(false)
        case Right(b) => Future.successful(b)
      }
    case None => Future.successful(false)

  }

}

【讨论】:

  • 我试过这个,但它不起作用。错误是Expression of type Future[Future[Boolean]] doesn't conform the expected type _S。我删除了Future.succesful(),我得到了Expression of type Future[Boolean] doesn't conform the expected type _S
  • 抱歉,假设 remove(x: String) 调用返回 Future[Either[X]].. 如果没有,请告诉我正确的类型签名。
  • 能否请您也帮我删除该警告:a pure expression does nothing in statement position; you may be omitting necessary parentheses [warn] case None => Future.successful(false)。我从上面的每个Future.successful 得到它。
  • 你不需要第二个flatMap,如果你也用fold替换模式匹配,你可以写:removeResult.map(_.fold(_ => false, identity))
猜你喜欢
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
相关资源
最近更新 更多