我必须有一个类型为List[Unit]
的值,我该怎么做才能将其减少为Unit
?
def insertMany(users: List[User]) : IO[Unit] =
lines.map(line => createorUpdate(user))
.transact(xa)
def createorUpdate(user: User): ConnectionIO[Unit] =
sql"""
INSERT INTO $tableName ($columns)
VALUES (${user.id}, ${user.age}, NOW(), NOW())
ON CONFLICT DO NOTHING"""
.update.run
.map(_ => ())
以下是完整的定义我得到了一个错误:
value transact is not a member of List[doobie.ConnectionIO[Unit]]
[error] possible cause: maybe a semicolon is missing before `value transact'?
[error] .transact(xa)
[error] ^
[error] one error found
听起来你在寻找[updateMany][1]
,但有时这并不奏效。
如果您正试图使现有代码发挥作用,则需要将transact
应用于IO
所以它必须是这样的:
def insertMany(lines: List[String]) : IO[Unit] =
lines.map(line => createorUpdate(line)).sequence_.transact(xa)
sequence
基本上从List[IO[your_type]]变为IO[List[your_type]]。。。
当你有map
和sequence_
时,你总是可以转换为traverse
,所以这也可以
def insertMany(lines: List[String]) : IO[Unit] =
lines.traverse_(line => createorUpdate(line)).transact(xa)