gpt4 book ai didi

java - Vert.x 与同步事务

转载 作者:行者123 更新时间:2023-12-02 11:34:25 24 4
gpt4 key购买 nike

早上好,我在 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 所期望的契约(Contract)(请参阅有关 blocking 的文档)。

正确的方法是使用Future提供的map方法处理结果。

在您的情况下retornaRiscoCalculadoProjeto(...).map(res -> {...})。通过使用允许更丰富的操作集的 rxified API 可以使这变得更好。

关键信息仍然是:不要阻止!

关于java - Vert.x 与同步事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com