在Scala的收益率中,从future内部返回响应
在下面的代码中,我对Scala函数进行了一次播放,在在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.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