2016-02-08 118 views
0

自己的異步左撇子我想編寫一個函數需要一些參數和Handler<E>對象。基於其他參數做一些計算後,我需要返回處理程序對象的結果。如何用Java編寫vertx

爲了更好地解釋它,我給個例子:

public void getPlaces(LatLong latLong, int redius, Collection<PlaceType> places) 
{ 
    if(redius <= 0 || redius > 50000) 
    { 
     throw new IllegalAccessError("redis can be 0 to 50000 meters only"); 
    } 
    String uri = String.format(GOOGLE_PLACE_API_URI, latLong.getLatitude(), latLong.getLongitude(), redius, PROJECT_API_KEY, Joiner.on("|").join(places)); 


    HttpClientRequest request = httpClient.getAbs(uri, response ->{ 
     logger.info("Received response with status code={} message={}", response.statusCode(), response.statusMessage()); 
     response.bodyHandler(buffer -> { 
      JsonObject result = buffer.toJsonObject(); 
      String nextPageToken = result.getString("next_page_token"); 
      JsonArray resultArray = result.getJsonArray("results"); 
      System.out.println("nextPageToken="+nextPageToken+" result="+resultArray); 
     }); 

    }).setTimeout(30000); 

    request.exceptionHandler(e -> { 
     logger.error("Caught exception while making request for google place APIs. Error message={} e=", e.getMessage(), e); 
    }); 
    request.end(); 
} 

    public void getPlaces(LatLong latLong, int redius, Collection<PlaceType> places, Handler<JsonObject> response) 
{ 
    // COMPLETE THIS USING ABOVE FUNCTION 
    getPlaces(latLong, redius, places); 
} 

回答

1

我不知道理解你的需要,但我猜你想打電話給你的計算結果的處理程序。所以這個代碼應該做你想做的:

public void getPlaces(LatLong latLong, int redius, Collection<PlaceType> places, Handler<JsonObject> handler) { 

    if(redius <= 0 || redius > 50000) { 
     throw new IllegalAccessError("redis can be 0 to 50000 meters only"); 
    } 

    String uri = String.format(GOOGLE_PLACE_API_URI, latLong.getLatitude(), latLong.getLongitude(), redius, PROJECT_API_KEY, Joiner.on("|").join(places)); 

    HttpClientRequest request = httpClient.getAbs(uri, response ->{ 
     logger.info("Received response with status code={} message={}", response.statusCode(), response.statusMessage()); 
     response.bodyHandler(buffer -> { 
      JsonObject result = buffer.toJsonObject(); 
      String nextPageToken = result.getString("next_page_token"); 
      JsonArray resultArray = result.getJsonArray("results"); 
      System.out.println("nextPageToken="+nextPageToken+" result="+resultArray); 
      handler.handle(result); // call the result handler 
     }); 

    }).setTimeout(30000); 

    request.exceptionHandler(e -> { 
     logger.error("Caught exception while making request for google place APIs. Error message={} e=", e.getMessage(), e); 
    }); 
    request.end(); 
} 

希望這會有所幫助。