2016-11-08 12 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の内部で呼び出された後、Postmanを使用して最初のリクエストからnullを返します。 2番目の要求に対して、正しい結果を返します。どうしてか分かりません。なぜ私は最初のリクエストvert.xから結果を得ることができませんでしたか?

答えて

1

お客様のgetServiceQueryメソッドは非同期処理(DB.select)を実行しますので、処理する前にクエリを返すことになります。関数の戻り値の型を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; 
    } 
} 
+0

あなたの完璧な答えのために@Nirajがありがとうございました。 – OLH

+0

JsonObjectで今後の結果をどのように保管できますか? – OLH

+0

ありがとう@niraj 'futures'を調整するために' CompositeFuture'を使用しました – OLH

関連する問題