首页 > 解决方案 > 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());

标签: javaspringhttpasynchronous

解决方案


由于调用返回CompletableFuture,它已经是异步的。是的,get() 方法是一个同步函数。使用它不会使应用程序变慢,它会使应用程序消耗更多的内存。异步访问如

   response.thenApply(r->r.getUser().getId());

看起来正确。

错误消息的原因是该方法lookUpUserId被声明为返回字符串,因此必须有一个返回语句。如果要使其异步,则将其声明为返回CompletableFuture<String>并添加返回语句

 return response.thenApply(r->r.getUser().getId());

推荐阅读