我在使用Akka和Scala的真实项目中第一次工作.在为DAO设计接口时(将有两个实现:内存和mongo),我带来了以下疑问.假设我们有像这样的UserRepository的同步版本
trait UserRepository {
def find(id: Int): Option[User]
def save(user: User): User
def delete(user: User): Unit
}
Run Code Online (Sandbox Code Playgroud)
和它的异步版本将是这样的:
trait UserRepository {
def find(id: Int): Future[Option[User]]
def save(user: User): Future[User]
def delete(user: User)
}
Run Code Online (Sandbox Code Playgroud)
您如何定义删除方法的返回时间?未来[单位]?未来[任何]未来[无效]?在异步操作中返回的最佳类型是什么,我只关心它的副作用是否成功应用.我没有什么可以返回,但我想知道删除是否成功完成,或者如果异常能够注册onFailure回调.
Tra*_*own 10
您应该使用Future[Unit]与Unit在同步情况下使用的完全相同的原因- 您需要返回一些内容,但是没有任何需要返回的内容.Future[Any]另一方面,意思是"这里有东西,但我不会告诉你它是什么".我们甚至不谈论Future[Void]意味着什么.
如果您不想接受我的话,请快速进行谷歌搜索"Future[Unit]" scala,您会发现很多其他人在这种情况下使用它.
你也可以IO ()在Haskell中使用这个习惯用法- 在哪里()是单位类型,IO并且在某些方面类似于Scala Future- 来表示我们只关心副作用的计算.
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |