为什么我无法从第一个请求 vert.x 获得结果?
Why I couldn't get the result from the first request vert.x?
public class Ussd {
private static Logger logger = LogManager.getLogger(Ussd.class);
private static String query;
public static void ussdMessages(RoutingContext routingContext){
String codeService = routingContext.getBodyAsJson().getString("codeService");
query=getServiceQuery(codeService);
System.out.println("Query : "+query);
}
public static String getServiceQuery(String codeService){
JsonObject params = new JsonObject();
params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
params.put("PARAMS", new JsonArray().add(codeService));
System.out.println(params);
DB.select(params, res -> {
if (res.succeeded()) {
query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
System.out.println(query);
} else {
query = res.cause().getMessage();
}
});
return query;
}
}
方法 getServiceQuery
returns 我的确切结果,我将其存储到静态查询中,但在方法 ussdMesages
中调用后,它 returns 来自第一个请求的空值使用邮差。对于第二个请求,它 returns 是正确的结果。不知道为什么。
您的 getServiceQuery
方法执行异步工作 (DB.select
),因此在您的情况下,您是在处理查询之前 returning 查询。将函数的 return 类型从 String 更改为 Future。
public class Ussd {
private static Logger logger = LogManager.getLogger(Ussd.class);
private static String query;
public static void ussdMessages(RoutingContext routingContext){
String codeService = routingContext.getBodyAsJson().getString("codeService");
getServiceQuery(codeService).setHandler(r -> {
System.out.println("query : "+r.result());
});
}
public static Future<String> getServiceQuery(String codeService){
Future<String> future = Future.future();
JsonObject params = new JsonObject();
params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
params.put("PARAMS", new JsonArray().add(codeService));
System.out.println(params);
DB.select(params, res -> {
if (res.succeeded()) {
query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
System.out.println(query);
future.complete(query);
} else {
future.fail(res.cause().getMessage());
}
});
return future;
}
}
public class Ussd {
private static Logger logger = LogManager.getLogger(Ussd.class);
private static String query;
public static void ussdMessages(RoutingContext routingContext){
String codeService = routingContext.getBodyAsJson().getString("codeService");
query=getServiceQuery(codeService);
System.out.println("Query : "+query);
}
public static String getServiceQuery(String codeService){
JsonObject params = new JsonObject();
params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
params.put("PARAMS", new JsonArray().add(codeService));
System.out.println(params);
DB.select(params, res -> {
if (res.succeeded()) {
query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
System.out.println(query);
} else {
query = res.cause().getMessage();
}
});
return query;
}
}
方法 getServiceQuery
returns 我的确切结果,我将其存储到静态查询中,但在方法 ussdMesages
中调用后,它 returns 来自第一个请求的空值使用邮差。对于第二个请求,它 returns 是正确的结果。不知道为什么。
您的 getServiceQuery
方法执行异步工作 (DB.select
),因此在您的情况下,您是在处理查询之前 returning 查询。将函数的 return 类型从 String 更改为 Future。
public class Ussd {
private static Logger logger = LogManager.getLogger(Ussd.class);
private static String query;
public static void ussdMessages(RoutingContext routingContext){
String codeService = routingContext.getBodyAsJson().getString("codeService");
getServiceQuery(codeService).setHandler(r -> {
System.out.println("query : "+r.result());
});
}
public static Future<String> getServiceQuery(String codeService){
Future<String> future = Future.future();
JsonObject params = new JsonObject();
params.put("QUERY", Queries.DB_SELECT_SERVICE_QUERY);
params.put("PARAMS", new JsonArray().add(codeService));
System.out.println(params);
DB.select(params, res -> {
if (res.succeeded()) {
query = res.result().getJsonArray("results").getJsonArray(0).getString(0);
System.out.println(query);
future.complete(query);
} else {
future.fail(res.cause().getMessage());
}
});
return future;
}
}