在Scala的收益率中,从future内部返回响应

在Scala的收益率中,从future内部返回响应,scala,playframework,Scala,Playframework,在下面的代码中,我对Scala函数进行了一次播放,在屈服内部有一个未来。我得到一个编译错误类型不匹配;找到:scala.concurrent.Future[无需任何内容]:play.api.mvc.Result。我是否应该在收益率内平面映射未来以返回Ok响应 def f1 = Future { 1 } def f2 = Future { 2 } def index = Action.async (parse.json) { request => for {

在下面的代码中,我对Scala函数进行了一次播放,在
屈服
内部有一个
未来
。我得到一个编译错误
类型不匹配;找到:scala.concurrent.Future[无需任何内容]:play.api.mvc.Result
。我是否应该在收益率内平面映射未来以返回
Ok
响应

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

  def index = Action.async (parse.json) { request => 

        for { x1 <- f1 }
        yield {
           val f = f2
           f.flatMap { result =>
              Ok("X")
           }

        }
  }
def f1=Future{1}
def f2=未来{2}
def index=Action.async(parse.json){request=>
对于{x1
Ok(“X”)
}
}
}

不,当你说
flatMap
时,你是说函数中返回的结果是一个
Future[T]
,在你的例子中,它返回一个
结果
,因此只使用
map
就可以了,但这并不是非常惯用的方法,因为你必须在
Future[result]结束时将
展平

(for { x1 <- f1 } yield {
    val f = f2
    f.map( result =>
       Ok("X")
    )
}).flatten
(用于{x1
Ok(“X”)
)
}).压扁
更惯用的方法是使用a来理解整个事情:

for {
  x1 <- f1
  x2 <- f2
} yield {
  Ok("X")
}
用于{

x1否,当您说
flatMap
时,您是说函数中返回的结果是
Future[T]
,在您的示例中,它返回一个
结果
,因此只需使用
映射
就可以了,但这并不是非常惯用的方法,因为当您得到
Future[result]时,您必须
展平

(for { x1 <- f1 } yield {
    val f = f2
    f.map( result =>
       Ok("X")
    )
}).flatten
(用于{x1
Ok(“X”)
)
}).压扁
更惯用的方法是使用a来理解整个事情:

for {
  x1 <- f1
  x2 <- f2
} yield {
  Ok("X")
}
用于{

x1使用
Future的
yield
中的
Future.flatMap
进行理解…在
Future的
yield
中使用
Future.flatMap
进行理解…问题是我需要运行三个期货(f1、f1a、f1b)为了理解和结果,我需要运行另一个未来的f2(在收益率部分中)。因此,我最终得到了收益率内的未来。有没有其他方法可以做到这一点?你有没有理由需要在收益率内运行该未来?听起来它可能存在于收益率外,除非我有误解。只需添加
x1b问题是我需要运行三个期货(f1、f1a、f1b)为了理解和结果,我需要运行另一个未来的f2(在收益率部分中)。因此,我最终会在收益率内拥有一个未来。有没有其他方法可以做到这一点?你有没有理由需要在收益率内运行该未来?听起来它可能存在于收益率之外,除非我有误解。只需添加
x1b