4

play 2 を使用して、外部 API に対して複数の Web リクエストを作成したいと考えています。各 Web リクエストはpageパラメータによって異なります。私のコードは次のとおりです。

static WSRequestHolder urlPaging = WS
        .url("http://my_api")
        .setQueryParameter("apiKey", "api_key")
        .setQueryParameter("pageSize", "5")
        .setQueryParameter("format", "json");

public static Result insertProducts() {
    int totalPages = 83;
    Logger.info("total pages: " + totalPages);
    for (int currentPage = 1; currentPage < totalPages; currentPage++) {
        Logger.info("--current page:" + currentPage);
        result(currentPage);
    }
    return ok();
}

public static AsyncResult result(int currentPage) {
    return async(urlPaging
            .setQueryParameter("page", String.valueOf(currentPage)).get()
            .map(new Function<WS.Response, Result>() {
                public Result apply(WS.Response response) {
                    insertProductsFromPage(response);
                    return ok();
                }
            }));
}

ページ1では機能しますが、ページ2で内部エラーが発生するため、result非同期リクエストメソッドを適切に構築していないと思われます。管理者からこれを実行しているため、これは本当に非同期である必要はないことに注意してください。これらのリクエストがすべて解析されるまで待機できますが、プレイ 2 で同期方法が見つかりませんでした。私が間違っていることを教えてください。

4

1 に答える 1

5

外部 WS 呼び出しを同期的に行いたい場合は、promiseのget()メソッドを使用するだけです。

例えば:

Promise<WS.Response> promise = urlPaging.setQueryParameter("page", String.valueOf(currentPage)).get();
WS.Response response = promise.get(); // wait for the result of the promise.
于 2012-10-07T12:48:25.927 に答える