2016-11-08 4 views
-1
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 возвращает мой точный результат, и я помещаю его в статический запрос, но после вызова метода внутри метода ussdMesages он возвращает null с первого запроса, используя Postman. Для второго запроса он возвращает правильный результат. Я не знаю почему.Почему я не смог получить результат от первого запроса vert.x?

ответ

1

Ваш getServiceQuery метод выполняет асинхронную работу (DB.select), поэтому в вашем случае вы возвращаете запрос перед его обработкой. Измените возвращаемый тип функции от String to 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; 
    } 
} 
+0

спасибо большое @Niraj за ваш идеальный ответ :) – OLH

+0

как я могу запасти будущий результат в JsonObject? – OLH

+0

thanks @niraj Я использовал 'CompositeFuture' для координации' фьючерсов' – OLH

Смежные вопросы