Извините заранее за основной вопрос. Я начинаю изучать Scala с http4s и в обработчике маршрутизатора, я пытаюсь ввести запись в MongoDB. Насколько я могу судить insertOne
возвращает Observable[Completed]
.http4s, Service Executor and Mongodb: Как подождать окончания insertOne
Любая идея, как я могу дождаться завершения наблюдения, прежде чем возвращать ответ?
Мой код:
class Routes {
val service: HttpService = HttpService {
case r @ GET -> Root/"hello" => {
val mongoClient: MongoClient = MongoClient()
val database: MongoDatabase = mongoClient.getDatabase("scala")
val collection: MongoCollection[Document] = database.getCollection("tests")
val doc: Document = Document("_id" -> 0, "name" -> "MongoDB", "type" -> "database",
"count" -> 1, "info" -> Document("x" -> 203, "y" -> 102))
collection.insertOne(doc)
mongoClient.close()
Ok("Hello.")
}
}
}
class GomadApp(host: String, port: Int) {
private val pool = Executors.newCachedThreadPool()
println(s"Starting server on '$host:$port'")
val routes = new Routes().service
// Add some logging to the service
val service: HttpService = routes.local { req =>
val path = req.uri
val start = System.nanoTime()
val result = req
val time = ((System.nanoTime() - start)/1000)/1000.0
println(s"${req.remoteAddr.getOrElse("null")} -> ${req.method}: $path in $time ms")
result
}
// Construct the blaze pipeline.
def build(): ServerBuilder =
BlazeBuilder
.bindHttp(port, host)
.mountService(service)
.withServiceExecutor(pool)
}
object GomadApp extends ServerApp {
val ip = "127.0.0.1"
val port = envOrNone("HTTP_PORT") map (_.toInt) getOrElse (8787)
override def server(args: List[String]): Task[Server] =
new GomadApp(ip, port)
.build()
.start
}
ОК, я думаю, что получил его после прочтения документации; ответ должен быть самой задачей. –
Прочтите документ 0.15. – Reactormonk