加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中回归未来的未来

发布时间:2020-12-16 10:05:59 所属栏目:安全 来源:网络整理
导读:在下面的代码中,我必须返回在另一个未来之后调用的未来结果.我在future2.map行中收到以下错误: type mismatch; found : scala.concurrent.Future[play.api.mvc.Result] required: play.api.mvc.Result 如何使这项工作? def method1 = Action.async { reque
在下面的代码中,我必须返回在另一个未来之后调用的未来结果.我在future2.map行中收到以下错误:

type mismatch; found : scala.concurrent.Future[play.api.mvc.Result]
required: play.api.mvc.Result

如何使这项工作?

def method1 = Action.async { request => 
    val future1 = f1
    future1.map { result1 =>
          val future2 = f2
          future2.map { result2 =>
              Ok(result1+result2+"")
          }
    }
}

def f1 = Future { 1 }
def f2 = Future { 2 }

解决方法

你可以通过很多方式做到这一点.但首先,您需要了解map和flatMap如何与Future配合使用:

def map[S](f: (T) ? S): Future[S]
def map[S](f: (T) ? Future[S]): Future[Future[S]]
def flatMap[S](f: (T) ? Future[S]): Future[S]

请注意,在上面的签名中,您使用已经是未来的值调用map和flatMap,即Future [< some-value>].map(…)或Future [< some-value>].flatMap (……).

方法1:

def method1 = Action.async { request =>
    val future1 = f1
    future1.flatMap { result1 => //replaced map with flatMap
      val future2 = f2
      future2.map { result2 =>
        Ok(result1+result2+"")
      }
    }
  }

  def f1 = Future { 1 }
  def f2 = Future { 2 }

方法2:

def method1 = Action.async { request =>
    val future1 = f1
    future1.flatMap { result1 => //replaced map with flatMap
      val future2 = f2
      future2.flatMap { result2 => //replaced map with flatMap
        Future.successful{Ok(result1+result2+"")} // used Future.successful{} to generate a Future of Result
      }
    }
  }

  def f1 = Future { 1 }
  def f2 = Future { 2 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读