[英]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.