でMonixを使用しようとしてTask
いますmongo-scala-driver
。ちょっと理解に苦しむError Handling
val mongoClient: Resource[Task, MongoConnection[Task, DomainModel]] =
MongoTypedConnection.create[Task, DomainModel](
"mongodb:...&authMechanism=SCRAM-SHA-1"
)
mongoClient.use { client =>
val changeStream: Task[ChangeStreamObservable[DomainModel]] =
for {
collection <- client.getMongoCollection("myDatabase", "myCollection")
changes <- client.watchCollection(collection)
} yield changes
...
...
...
.as(ExitCode.Success)
}
エラーがない場合、これは完全に機能します。これにエラー処理を追加したい (たとえば、間違った名前を処理する) database
。collection
ドキュメントに基づく私の最初の試みは、次を試すことです:
val changeObs: io.Serializable =
Await.result(changeStream
.onErrorHandleWith {
case _: TimeoutException =>
// Oh, we know about timeouts, recover it
Task.now("Recovered!")
case other =>
// We have no idea what happened, raise error!
Task.raiseError(other)
}.runToFuture, 5.seconds)
しかし、これは私にio.Serializable
. ChangeStreamObservable[DomainModel]
ある種のきちんとしたエラー処理をしながら保持するにはどうすればよいですか? 私が研究できるパターンへのポインタに感謝します。
ブラジル