id | title | sidebar_label |
---|---|---|
async | 异步请求 | 异步请求 |
在Forest使用异步请求,可以通过设置@Request
注解的async
属性为true
实现,不设置或设置为false
即为同步请求。
@Request(
url = "http://localhost:8080/hello/user?username=${0}",
async = true,
headers = {"Accept:text/plain"}
)
void asyncGet(String username, OnSuccess<String> onSuccess);
一般情况下,异步请求都通过OnSuccess<T>
回调函数来接受响应返回的数据,而不是通过接口方法的返回值,所以这里的返回值类型一般会定义为void
。
:::info 提示 关于回调函数的使用请参见 《回调函数》 :::
// 异步执行
myClient.asyncGet("foo", (result, request, response) -> {
// 处理响应结果
System.out.println(result);
});
此外,若有些小伙伴不习惯这种函数式的编程方式,也可以用Future<T>
类型定义方法返回值的方式来接受响应数据。
@Request(
url = "http://localhost:8080/hello/user?username=foo",
async = true,
headers = {"Accept:text/plain"}
)
Future<String> asyncFuture();
这里Future<T>
类就是JDK
自带的java.util.concurrent.Future
类, 其泛型参数T
代表您想接受的响应数据的类型。
关于如何使用Future
类,这里不再赘述。
// 异步执行
Future<String> future = myClient.asyncFuture();
// 做一些其它事情
// 等待数据
String result = future.get();