开始学习scala并为异步执行设计/实现。我的问题是如何设计API(然后调用)它们以返回Unit的操作,但可能不会马上。例如,在下面的代码片段中,该函数(使用Slick 3.0)将用户插入数据库。 Unit是这个函数的正确返回类型,如果是这样,那么调用者怎么知道新插入的用户是否/何时成功?如何使用期货设计和调用Scala API
override def insertOrUpdate(entity: User): Unit = {
database.run(users.insertOrUpdate(entity))
}
例如,如果异步上述执行和呼叫者看起来像
//create and insert new user with id = 7
val newUser = User(7, "someName")
userRepo.insertOrUpdate(newUser)
如何调用者知道它是否是安全的
userRepo.findById(7)
在单元测试,我知道如果我通过findById调用立即跟进插入调用,findById将不会返回任何内容,但如果我在插入和调用之间引入一些延迟,它会找到新用户。总结一下,为一个函数设计API的正确方法是异步执行的,但没有自然的返回值来包装在Future中?