我正在尝试使用fs2流0.10.0-M9和doobie版本0.5.0-M9来获取http调用中的一系列对象,我想将其插入到postgres数据库但我遇到了问题构造此代码,得到以下错误:
错误:(49,12)无法证明Seq [fs2.Stream [cats.effect.IO,Int]] <:其中fs2.Stream [cats.effect.IO,O2]。 。加入(100)
我想要做的是在调用Web服务返回后同时运行insert语句。这是代码:
fetchProducts(date).map{items =>
items.map( i =>
Stream.eval(upsertProductIO(i).transact(xa))
)
}
.join(100)
.run
.unsafeRunSync()
//rest call
def fetchProducts(changeDate: String): Stream[IO, Seq[Product]] = {
//rest call here
}
//DAO code
def upsertProductIO(p: Product): ConnectionIO[Int] = {
upsertProduct(p).run
}
答案 0 :(得分:2)
问题是您有Seq[Stream[IO, Seq[Product]]
,您想要的是Stream[IO, Seq[Product]]
,您可以使用Foldable
类型类实例执行此操作:
import cats.implicits._
import scala.concurrent.ExecutionContext.Implicits.global
fetchProducts(date).map { items =>
items.map(i => Stream.eval(upsertProductIO(i).transact(xa)))
}.map(seqOfStream.toList.sequence)
.join(100)
.run
.unsafeRunSync()