java - Java slack sdk客户端如何使调用异步
问题描述
我正在尝试通过在 java 中使用 slack 的 sdk 客户端来拨打电话,以便通过使用电子邮件名称获取用户的 ID。松弛客户端返回CompletableFuture
对象。如果我使用 get() 方法,我可以获得 user_name,但据我了解,它是一个同步函数,它会使应用程序变慢。还有另一种方法可以使此调用异步吗?
public static String lookUpUserId(String email) throws ExecutionException, InterruptedException {
CompletableFuture<UsersLookupByEmailResponse> response = slackClient.usersLookupByEmail(r -> r
.email(email));
UsersLookupByEmailResponse data = response.get();
return data.getUser().getId();
}
我尝试像这样使用 supplyFunc 和 thenApply ,但它给出了一个错误,说“缺少返回语句”,尽管我返回了一个值。我只是关心性能并好奇是否有更好的方法来处理这个问题。谢谢
response.thenApply(r->r.getUser().getId());
解决方案
由于调用返回CompletableFuture
,它已经是异步的。是的,get
() 方法是一个同步函数。使用它不会使应用程序变慢,它会使应用程序消耗更多的内存。异步访问如
response.thenApply(r->r.getUser().getId());
看起来正确。
错误消息的原因是该方法lookUpUserId
被声明为返回字符串,因此必须有一个返回语句。如果要使其异步,则将其声明为返回CompletableFuture<String>
并添加返回语句
return response.thenApply(r->r.getUser().getId());
推荐阅读
- c# - System.Windows.Input.GetPosition(UIElement) 给出错误值
- javascript - Express 路由器中的 OOP 继承
- mysql - 从没有 mysql 的 PC 远程运行 mysql 查询
- scala - 在包含 Scala Spark 数据帧中的数组的列中过滤数组的长度
- scilab - Runge-Kutta 二阶,波变换,求解保留方程*
- jquery - 基础下拉菜单不工作在角度
- angularjs - 显示和隐藏在带有“dirPagination”(AngularJS)的 ng-repeat 中
- php - Laravel 从上传中获取保存文件的路径
- wordpress - wordpress 奇怪地翻译了字段
- java - 课堂上的情况?