在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行中收到以下错误:
如何使这项工作? 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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |