阿里云OpenAPI 这个是什么问题?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你提供的代码来看,你在尝试异步地调用阿里云的OpenAPI,并同步地获取返回结果。这是Java 8引入的一种新的异步编程模型,它允许你在不阻塞当前线程的情况下执行耗时操作,然后在需要的时候再获取结果。
你遇到的问题可能是因为你的代码在等待response.get()的结果时,response还没有被完成(completed),也就是说,阿里云的OpenAPI还没有返回结果。
解决这个问题的一个方法是使用CompletableFuture的thenAccept或thenRun方法,这些方法会在CompletableFuture被完成后被执行,而不是立即执行。这样,你就可以在阿里云的OpenAPI返回结果后再进行后续的处理,而不需要等待结果。
例如:
CompletableFuture<RecognizeInvoiceResponse> response = client.recognizeInvoice(recognizeInvoiceRequest);
response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
});
在这个例子中,当response被完成后,它会调用thenAccept方法,并将返回结果传递给这个方法的参数(一个Consumer),然后这个Consumer会对返回结果进行处理(打印出来)。这样,即使response没有被完成,你的程序也不会阻塞。