0

で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)
      }

エラーがない場合、これは完全に機能します。これにエラー処理を追加したい (たとえば、間違った名前を処理する) databasecollectionドキュメントに基づく私の最初の試みは、次を試すことです:

      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]ある種のきちんとしたエラー処理をしながら保持するにはどうすればよいですか? 私が研究できるパターンへのポインタに感謝します。

ブラジル

4

1 に答える 1