【问题标题】:Future[Try[Option[Int]]] giving error found : models.TenantGlobalBranding [error] required: scala.concurrent.Future[?]Future[Try[Option[Int]]] 给出错误发现:models.TenantGlobalBranding [error] required: scala.concurrent.Future[?]
【发布时间】:2017-09-20 17:46:54
【问题描述】:

我有一个 Int:Future[Try[Option[Int]]] ,我需要该 Int 值。我有这样的代码:

def fun(number: Future[Try[Option[Int]]]): Future[Result] = {
  val num: Int = number.flatMap(x => processTry(x))
}

def processTry(x: Try[Option[Int]]): Int = processOption(x.getOrElse(Some(101)))
def processOption(x: Option[Int]): Int = x.getOrElse(101)

我收到此错误required: scala.concurrent.Future[?]

【问题讨论】:

标签: scala playframework future


【解决方案1】:

您可以利用模式匹配非常干净地处理答案和错误案例:

val result: Future[Try[Option[Int]]]
result.onComplete {
  case Success(Success(Some(i))) => // you get your i: Int
  case Success(Success(None)) => // you get None
  case _ => // Either the `Future` or the `Try` failed, you could also process both cases separately
}

【讨论】:

    【解决方案2】:
    1. 您的 number.flatMap 要求 lambda 返回 Future[Int]。而processTry 被定义为: Int。您可以将flatMap 替换为map
    2. 您已将num 定义为Int,而fun 的结果是Future[Result]。你错过了一些代码吗?
    3. val num = ... 的类型为 Unit,它与函数类型不同。

    代码可能看起来像

    def fun(number: Future[Try[Option[Int]]]): Future[Result] = {
      val num: Future[Int] = number.map(x => processTry(x))
      num.map{i => Result(i)}
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多