我有一個函數調用Foursquare API,我想設置一個超時。我想返回一個默認值(如果超時超過,則爲空響應)。我的實現:Java play 2.3.9。從承諾恢復TimeoutException
public Promise<Response> getDetails(final Place place) {
Logger.debug(BASE_URL + place.getFqId() + "?client_id=" + KEY + "&client_secret=" + SECRET_KEY + "&v=20140806&m=foursquare");
Promise<Response> response =
WS.url(BASE_URL + place.getFqId())
.setQueryParameter("client_id", KEY)
.setQueryParameter("client_secret", SECRET_KEY)
.setQueryParameter("v", "20140806")
.setQueryParameter("m", "foursquare")
.setTimeout(TIMEOUT)
.get().map(
new Function<WSResponse, Response>() {
public Response apply(WSResponse response) {
JsonNode json = response.asJson();
return new FoursquareResponse(place.getFqId(), json);
}
}
);
response.recover(new Function<Throwable, Response>() {
public Response apply(Throwable t) throws Throwable {
Logger.error("error", t);
Logger.error(place.getFqId());
return new FoursquareResponse(place.getFqId(), null);
}
});
return response;
}
我設置用於測試目的(1毫秒)較低的超時,而我仍然得到一個TimeoutException,即使它進入恢復體(記錄錯誤)。
任何人都可以幫忙嗎?謝謝。 :)
正是我需要的,非常感謝! :) – ssuljic