scala将平滑结果保存到新对象中
有没有办法将光滑查询的结果保存到新对象中 这是我巧妙的结果,列表中只有一个“对象”scala将平滑结果保存到新对象中,scala,playframework,playframework-2.0,slick,Scala,Playframework,Playframework 2.0,Slick,有没有办法将光滑查询的结果保存到新对象中 这是我巧妙的结果,列表中只有一个“对象” val result: Future[Seq[ProcessTemplatesModel]] = db.run(action) 结果应该映射到ProcessTemplatesModel上,因为我希望像这样访问值 process.title 这可能吗 谢谢TL;DR:您应该尽可能长时间地保留上下文 Future表示值将在将来某个时间给出(这就是我所说的值的上下文) 使用它的坏方法是阻塞线程,直到找到这样的值,然
val result: Future[Seq[ProcessTemplatesModel]] = db.run(action)
结果应该映射到ProcessTemplatesModel上,因为我希望像这样访问值
process.title
这可能吗
谢谢TL;DR:您应该尽可能长时间地保留上下文
Future
表示值将在将来某个时间给出(这就是我所说的值的上下文)
使用它的坏方法是阻塞线程,直到找到这样的值,然后使用它
更好的方法是告诉您的程序:“一旦找到值(无论何时),就用它做点什么”。这是一个延续或回调,在scala中通过map
和flatMap
实现
Seq
是您价值的另一个上下文。这意味着您实际上有不同的可能值。如果要确保最多有一个值,可以始终执行seq.headOption
将上下文从seq
切换到Option
使用它的坏方法是在不检查第一个值是否存在的情况下获取第一个值
一个更好的方法是告诉你的程序:“不管你有多少价值观,都要为每一个价值观这样做”
现在,您如何在上下文中工作?使用函子和/或单子运算符:map
,flatMap
例如,如果要将函数convertToSomethingElse
应用于上下文的每个元素,只需执行以下操作
result.map(list => list.map(process => convertToSomethingElse(process))
您将得到一个未来[Seq[SomethingElse]]
另一个例子是,如果要将结果保存到其他地方,可能需要一些IO或数据库操作,这可能需要一些时间,并且可能会失败。我们假设您有一个函数save(entity:ProcessTemplateModel):Future[Boolean]
,允许您保存一个模型。函数将花费一些时间(并且将在另一个线程中启动)并且可能失败的事实在返回类型Future[Boolean]
中是可见的(Boolean
在这里并不重要,重要的是我们再次拥有Future
上下文)
在这里,您必须执行以下操作(假设您只想保存列表中的第一个元素):
正如你所看到的,我们可以做我们想做的大部分事情,只需停留在Slick返回的上下文中。你不应该想离开他们,因为
- 大多数情况下,当您有
在上下文内部使用一些函数来处理上下文外部的值时,没有必要这样做map
- 提取方法在大多数情况下是不安全的:
如果选项#get
选项中没有元素,则抛出异常,
可能会阻止所有计算或抛出异常等待。结果(未来、持续时间)
- 游戏中的反应!可以使用
Action.async在控制器中以
s的形式给出Future
- TL;DR:您应该尽可能长时间地保留上下文
Future
表示值将在将来某个时间给出(这就是我所说的值的上下文)
使用它的坏方法是阻塞线程,直到找到这样的值,然后使用它
更好的方法是告诉您的程序:“一旦找到值(无论何时),就用它做点什么”。这是一个延续或回调,在scala中通过map
和flatMap
实现
Seq
是您价值的另一个上下文。这意味着您实际上有不同的可能值。如果要确保最多有一个值,可以始终执行seq.headOption
将上下文从seq
切换到Option
使用它的坏方法是在不检查第一个值是否存在的情况下获取第一个值
一个更好的方法是告诉你的程序:“不管你有多少价值观,都要为每一个价值观这样做”
现在,您如何在上下文中工作?使用函子和/或单子运算符:map
,flatMap
例如,如果要将函数convertToSomethingElse
应用于上下文的每个元素,只需执行以下操作
result.map(list => list.map(process => convertToSomethingElse(process))
您将得到一个未来[Seq[SomethingElse]]
另一个例子是,如果要将结果保存到其他地方,可能需要一些IO或数据库操作,这可能需要一些时间,并且可能会失败。我们假设您有一个函数save(entity:ProcessTemplateModel):Future[Boolean]
,允许您保存一个模型。函数将花费一些时间(并且将在另一个线程中启动)并且可能失败的事实在返回类型Future[Boolean]
中是可见的(Boolean
在这里并不重要,重要的是我们再次拥有Future
上下文)
在这里,您必须执行以下操作(假设您只想保存列表中的第一个元素):
正如你所看到的,我们可以做我们想做的大部分事情,只需停留在Slick返回的上下文中。你不应该想离开他们,因为
- 大多数情况下,当您有
在上下文内部使用一些函数来处理上下文外部的值时,没有必要这样做map
- 提取方法在大多数情况下是不安全的:
如果选项#get
选项中没有元素,则抛出异常,
可能会阻止所有计算或抛出异常等待。结果(未来、持续时间)
- 游戏中的反应!可以使用
Action.async在控制器中以
s的形式给出Future