簡體   English   中英

Vert.x與同步交易

[英]Vert.x with sync transaction

早上好,我在Vert.x中有以下代碼,我想訪問一個表以同步接收響應。

  private Future<String> retornaRiscoCalculadoProjeto(String numPrj) {

        Future<String> future = Future.future();

        jdbcClientSync.getConnection(conn -> {

            if (conn.failed()) {
                log.error("Falha ao recuperar a conexão com Sapiens", conn.cause());
                future.fail(conn.cause());
                return;
            }

            String sql = "SELECT TOP 1 obsprj FROM e615obs" +
                    " WHERE numprj = " + "?" +
                    " AND obsprj LIKE '%alterado risco%'" +
                    " ORDER BY SeqObs desc";
            JsonArray params = new JsonArray();

            params.add(numPrj);

            SQLConnection sqlConnection = conn.result();
            sqlConnection.queryWithParams(sql, params, ar -> {

                if (ar.failed()) {
                    log.error("Falha ao recuperar dados do Sapiens", ar.cause());
//                    future.fail(conn.cause());
                    return;
                }

                if (!ar.result().getResults().isEmpty()){
                    future.complete(ar.result().getResults().get(0).getList().get(0).toString());
                }

            }).close();
        });

        return future;
    }

我該如何做Vert.x同步響應

String response = retornaRiscoCalculadoProjeto(number);  

謝謝你的幫助

Vert.x本質上是異步的。 您想要在操作上進行阻塞以獲取String,這實際上會破壞Vert.x期望的合同(請參閱有關阻塞的文檔)。

正確的方法是使用Future提供的map方法處理結果。

在您的情況下retornaRiscoCalculadoProjeto(...).map(res -> {...}) 通過使用rxified API,可以使操作更加豐富,從而使其變得更好。

關鍵信息仍然存在:不要阻塞!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM