idtitlesidebar_label
    async
    异步请求
    异步请求

    在Forest使用异步请求,可以通过设置@Request注解的async属性为true实现,不设置或设置为false即为同步请求。

    1. @Request(
    2. url = "http://localhost:8080/hello/user?username=${0}",
    3. async = true,
    4. headers = {"Accept:text/plain"}
    5. )
    6. void asyncGet(String username OnSuccess<String> onSuccess);

    一般情况下,异步请求都通过OnSuccess<T>回调函数来接受响应返回的数据,而不是通过接口方法的返回值,所以这里的返回值类型一般会定义为void

    :::info 提示 关于回调函数的使用请参见 《回调函数》 :::

    1. // 异步执行
    2. myClient.asyncGet("foo", (result, request, response) -> {
    3. // 处理响应结果
    4. System.out.println(result);
    5. });

    此外,若有些小伙伴不习惯这种函数式的编程方式,也可以用Future<T>类型定义方法返回值的方式来接受响应数据。

    1. @Request(
    2. url = "http://localhost:8080/hello/user?username=foo",
    3. async = true,
    4. headers = {"Accept:text/plain"}
    5. )
    6. Future<String> asyncFuture();

    这里Future<T>类就是JDK自带的java.util.concurrent.Future类, 其泛型参数T代表您想接受的响应数据的类型。

    关于如何使用Future类,这里不再赘述。

    1. // 异步执行
    2. Future<String> future = myClient.asyncFuture();
    3. // 做一些其它事情
    4. // 等待数据
    5. String result = future.get();