Как преобразовать реактивный вызов JDB C в java в будущее в scala? - PullRequest
1 голос
/ 28 января 2020

См. Пример здесь: https://github.com/vietj/reactive-pg-client

// Pool options
PgPoolOptions options = new PgPoolOptions()
  .setPort(5432)
  .setHost("the-host")
  .setDatabase("the-db")
  .setUser("user")
  .setPassword("secret")
  .setMaxSize(5);

// Create the client pool
PgPool client = PgClient.pool(options);

// A simple query
client.query("SELECT * FROM users WHERE id='julien'", ar -> {
  if (ar.succeeded()) {
    PgResult<Row> result = ar.result();
    System.out.println("Got " + result.size() + " results ");
  } else {
    System.out.println("Failure: " + ar.cause().getMessage());
  }

  // Now close the pool
  client.close();
});

Как можно из этого получить будущее? В идеале мы могли бы написать код в следующем формате:

val f: Future[...] = clientF.query("select ...")

1 Ответ

3 голосов
/ 28 января 2020

Вы можете попробовать использовать обещание:

import scala.concurrent._

def fetch(query: String): Future[PgRowSet] = {

  val options = new PgPoolOptions()
      .setPort(5432)
      .setHost("the-host")
      .setDatabase("the-db")
      .setUser("user")
      .setPassword("secret")
      .setMaxSize(5)

  val client = PgClient.pool(options)

  val p = Promise[PgRowSet]()

  client.query(query, ar => {
      if (ar.succeeded) {
        p.success(ar.result()) //resolve promise as sucessful
      } else {
        p.failure(ar.cause()) //reject promise
      }
      client.close
  })

  p.future
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...