Html 在播放2.3.2的视图中使用Future

Html 在播放2.3.2的视图中使用Future,html,scala,asynchronous,playframework,Html,Scala,Asynchronous,Playframework,我正在写剧本2.3.2的申请。 在我的控制器中,我有一个异步方法来计算未来[选项[(字符串,Int)]] 由于计算速度较慢,我希望开始创建视图,并在计算完成后完成构建视图 在同一个控制器中,我有一个操作调用此方法并加载一个传递结果的视图,如下所示: def max = Action.async { calculateMax.flatMap(result => Future{Ok(recommendationsystem.views.html.ma

我正在写剧本2.3.2的申请。 在我的控制器中,我有一个异步方法来计算
未来[选项[(字符串,Int)]]

由于计算速度较慢,我希望开始创建视图,并在计算完成后完成构建视图

在同一个控制器中,我有一个操作调用此方法并加载一个传递结果的视图,如下所示:

def max = Action.async {
        calculateMax.flatMap(result => 
             Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))

         )  

}
@(max: scala.concurrent.Future[Option[(String, Int)]])

@import util._

@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
    <h1>Most used tag</h1>
    @max flatMap {result => result match {
    case Some(x) => {
        <p>
        <ul>
            <li>Tag: @x._1</li>
            <li>Occurrencies: @x._2</li>
        </ul>
        </p>


    }
    case None => {
        <p>No one tag present in the db</p>

    }
    }
    }

    <p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
    calculateMax.map(result => 
        Ok(recommendationsystem.views.html.manager.statistics.max(result))
    )
}
@(max: Option[(String, Int)])

    @max match {
       case Some(x) => {
           ...
       }
       case None => {
           <p>No one tag present in the db</p>
       }
    }
My max view的实现方式如下:

def max = Action.async {
        calculateMax.flatMap(result => 
             Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))

         )  

}
@(max: scala.concurrent.Future[Option[(String, Int)]])

@import util._

@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
    <h1>Most used tag</h1>
    @max flatMap {result => result match {
    case Some(x) => {
        <p>
        <ul>
            <li>Tag: @x._1</li>
            <li>Occurrencies: @x._2</li>
        </ul>
        </p>


    }
    case None => {
        <p>No one tag present in the db</p>

    }
    }
    }

    <p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
    calculateMax.map(result => 
        Ok(recommendationsystem.views.html.manager.statistics.max(result))
    )
}
@(max: Option[(String, Int)])

    @max match {
       case Some(x) => {
           ...
       }
       case None => {
           <p>No one tag present in the db</p>
       }
    }
@(最大值:scala.concurrent.Future[选项[(字符串,Int)])
@导入util_
@recommendationsystem.views.html.main(“最大标记”)(recommendationsystem.views.html.nav.navbar(“统计”)){
常用标签
@最大平面图{result=>结果匹配{
案例部分(x)=>{

  • 标签:@x.\u 1
  • 发生率:@x.\U 2

} 案例无=>{ 数据库中不存在任何标签

} } }

}
但是这段代码没有编译,编译器给了我以下编译错误:

[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/views/manager/statistics/max.scala.html:8: ')' expected but 'case' found.
[error]     case Some(x) => {
[error]     ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/views/manager/statistics/max.scala.html:18: ')' expected but 'case' found.
[error]     case None => {
[error]     ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/app/recommendationsystem/views/manager/statistics/max.scala.html:26: ';' expected but ',' found.
[error]     <p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
[error] ^
[error] three errors found
[error] /Users/alberto/git/bdrim/modules/recommendation-system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:27: ')' expected but 'case' found.
[error]     """),_display_(/*7.6*/max),format.raw/*7.9*/(""" """),format.raw/*7.10*/("""flatMap """),format.raw/*7.18*/("""{"""),format.raw/*7.19*/("""result => result match """),format.raw/*7.42*/("""{""")/*8.5*/case Some(x) =>/*8.20*/ {_display_(Seq[Any](format.raw/*8.22*/("""
[error]                                                                                                                                                                                                              ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:36: ')' expected but 'case' found.
[error]     """)))}/*18.5*/case None =>/*18.17*/ {_display_(Seq[Any](format.raw/*18.19*/("""
[error]                    ^
[error] /Users/alberto/git/bdrim/modules/recommendation-system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:40: ';' expected but ',' found.
[error]     """)))},format.raw/*23.5*/("""}"""),format.raw/*23.6*/("""
[error]            
[error]/Users/alberto/git/bdrim/modules/recommendationsystem/app/recommendationsystem/views/manager/statistics/max.scala.html:8:“)”应为“预期”,但找到了“案例”。
[错误]案例部分(x)=>{
[错误]^
[错误]/Users/alberto/git/bdrim/modules/recommendationsystem/app/recommendationsystem/views/manager/statistics/max.scala.html:18:“)”应为“”,但找到“case”。
[错误]案例无=>{
[错误]^
[错误]/Users/alberto/git/bdrim/modules/recommendationsystem/app/recommendationsystem/views/manager/statistics/max.scala.html:26:';“预期”,但“发现”。
[错误]

[错误]^ [错误]发现三个错误 [错误]/Users/alberto/git/bdrim/modules/recommendation system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:27:')应为“”,但找到了“case”。 [错误]“”“,”format.raw/*7.9*/(“”“),format.raw/*7.10*/(”flatMap“),format.raw/*7.18*/(“”“,”format.raw/*7.19*/(”result=>result match”“),format.raw/*7.42*/(“{”“”)/*8.5*/案例部分(x)=>/*8.20*/(Seq[Any format.raw/*8.22*/”) [错误]^ [错误]/Users/alberto/git/bdrim/modules/recommendation system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:36:“)”应为“”,但找到了“case”。 [错误]“”“))}/*18.5*/case None=>/*18.17*/{{Seq[Any](format.raw/*18.19*/(“”) [错误]^ [错误]/Users/alberto/git/bdrim/modules/recommendation system/target/scala-2.11/twirl/main/recommendationsystem/views/html/manager/statistics/max.template.scala:40:';“预期但”“发现”。 [错误]“”“)))},format.raw/*23.5*/(“”“}”)格式,format.raw/*23.6*/(“”) [错误]
视图似乎看不到未来类型。
有什么问题吗?

这里的编译错误来自于你的twirl语法,而不是未来的twirl。twirl模板对间距和新行非常挑剔。带有空格的
@max flatMap
肯定会破坏一些东西,因为twirl不知道是否应该打印出
max
,或者寻找更多的代码。它最好用
@{…}
包围整个块

但是,其中一些是不相关的,因为您不应该首先将
未来
传递给视图。模板不会部分呈现,然后稍后填充
未来
值。在
未来中包装
推荐系统.views.html.manager.statistics.max
。应用
基本上不起作用这里需要注意的关键是,
result
甚至不是
Future
。假设
calculateMax
返回
Future[Option[(String,Int)]
,当您调用
map
时,您正在异步操作
选项[(String,Int)]
Future
的结果

因此,控制器功能应如下所示:

def max = Action.async {
        calculateMax.flatMap(result => 
             Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))

         )  

}
@(max: scala.concurrent.Future[Option[(String, Int)]])

@import util._

@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
    <h1>Most used tag</h1>
    @max flatMap {result => result match {
    case Some(x) => {
        <p>
        <ul>
            <li>Tag: @x._1</li>
            <li>Occurrencies: @x._2</li>
        </ul>
        </p>


    }
    case None => {
        <p>No one tag present in the db</p>

    }
    }
    }

    <p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
    calculateMax.map(result => 
        Ok(recommendationsystem.views.html.manager.statistics.max(result))
    )
}
@(max: Option[(String, Int)])

    @max match {
       case Some(x) => {
           ...
       }
       case None => {
           <p>No one tag present in the db</p>
       }
    }
你的观点是这样的:

def max = Action.async {
        calculateMax.flatMap(result => 
             Future{Ok(recommendationsystem.views.html.manager.statistics.max(result))

         )  

}
@(max: scala.concurrent.Future[Option[(String, Int)]])

@import util._

@recommendationsystem.views.html.main("Max tag")(recommendationsystem.views.html.nav.navbar("statistics")) {
    <h1>Most used tag</h1>
    @max flatMap {result => result match {
    case Some(x) => {
        <p>
        <ul>
            <li>Tag: @x._1</li>
            <li>Occurrencies: @x._2</li>
        </ul>
        </p>


    }
    case None => {
        <p>No one tag present in the db</p>

    }
    }
    }

    <p><a href="@recommendationsystem.controllers.manager.routes.StatisticsController.index()"></a> </p>
}
def max = Action.async {
    calculateMax.map(result => 
        Ok(recommendationsystem.views.html.manager.statistics.max(result))
    )
}
@(max: Option[(String, Int)])

    @max match {
       case Some(x) => {
           ...
       }
       case None => {
           <p>No one tag present in the db</p>
       }
    }
@(最大值:选项[(字符串,Int)])
@最大匹配{
案例部分(x)=>{
...
}
案例无=>{
数据库中不存在任何标签

} }