【发布时间】:2016-08-23 13:46:27
【问题描述】:
在我的method1中,我需要异步调用另一个method2,它返回Option(result1)。比,如果result1为空,我需要异步调用另一个method3,但如果result1不为空,我只需要返回它。
方法如下:
def signIn(username: String): Future[User] = {
for {
foundUser <- userService.findByUsername(username) // this method returns Future[Option[User]],
// foundUser is Option[User]
user <- if (foundUser.isEmpty) {
val newUser = User(username = "User123")
userService.create(newUser).map(Some(_)) // this method returns Future[Option[User]]
}
else
// Here I want to return just foundUser, of course, it is not possible.
// IS THIS APPROACH CORRECT?? DOES THIS LINE CREATE ASYNCHRONOUS CALL?
Future.successful(foundUser)
} yield user
}
问题是:
Future.successful(foundUser) - 这种方法在上面的代码中是否正确?此行是否创建异步调用?如果有,如何避免?我已经异步获取了 foundUser,我不想为了返回已经获取的值而进行额外的异步调用。
【问题讨论】:
标签: scala future for-comprehension