我有以下接口:
interface UserRepository {
fun role(codename: String): IO<Option<Role>>
fun accessRights(roleId: Long): IO<List<AccessRight>>
}
现在尝试使用它来组成这样的有效操作:
private fun retrieveRole(roleCodename: String): IO<Option<RoleTo>> =
IO.fx {
val role = userRepository.role(roleCodename).bind()
role.map { r ->
val ar = userRepository.accessRights(r.id).bind()
RoleTo.of(r, ar)
}
}
代码无法在第二次绑定上编译(调用userRepository.accessRights(r.id).bind()
sincebind
是挂起函数。我如何正确组合两个操作?我不明白为什么第一次绑定有效但第二次没有,我不想让我的函数暂停还是我必须这样做?