gpt4 book ai didi

scala - 如何处理游戏 View 中隐式传递的 future

转载 作者:行者123 更新时间:2023-12-03 03:25:43 25 4
gpt4 key购买 nike

在我的特定情况下,我有一个在所有页面上呈现的菜单。菜单内容使用 slick 从数据库加载并隐式传递到 View 。整个事情看起来像这样:

Controller

class Application @Inject()(
implicit val menuContext: MenuContext
) extends Controller {

def index = Action.async {
val content: Future[Content] = getContent
content.map(c => Ok(views.html.index(c)))
}
}

菜单上下文

class MenuContext {
val models: Future[List[SomeModel]] = getModelsFromDB
}

查看

@(content: Content)(implicit menuContext: MenuContext)
...
@menuContext.models // how to access my actual model and not the Future?
...

如何在我的 View 中访问List[SomeModel]?是否有等效的 Action.async 来传递隐式参数?或者对于(几乎)所有 View 中所需的内容是否有更好的解决方案?

最佳答案

让模板必须处理Future绝对不是一个好主意 - 所以问题就变成了你评论中的问题 - 如何非阻塞(? ) 从您的异步内容源获取内容,以及从其他异步内容源获取菜单项?

对两个 Future 实例进行 for 理解就可以解决问题:

def index = Action.async { 
val fContent:Future[Content] = getContent
val fMenus:Future[List[SomeModel] = getModelsFromDB

for {
content <- fContent
menus <- fMenus
} yield(Ok(views.html.index(content)(menus))))
}

注意:您可能会尝试保存几行并将方法调用(getContentgetModelsFromDB)直接放入for block 。不幸的是,虽然它可以编译并且工作,但这两个任务不会并行运行,从而使练习有些徒劳。

关于scala - 如何处理游戏 View 中隐式传递的 future,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30503615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com