问题标签 [completion-stage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
588 浏览

java - 在可完成的未来内的循环中异步调用可完成的未来

有 3 个服务都是 REST 调用 - serviceOne、serviceTwo 和 serviceThree。serviceTwo 处理依赖于 serviceOne 的输出,serviceThree 处理依赖于 serviceTwo 的输出。但是,serviceThree 需要循环运行。

我想要一种在 serviceThreeRespCF 可完成的未来完成后获得最终响应的方法。目前,plansResponse 在 service3 完成处理之前返回。

我尝试将 join() 用于 serviceThreeRespCF 但没有帮助。有没有更好的方法来做到这一点,即不使用 get() 或 join()?

编辑 1:尝试加入(return 语句是上面代码的延续)

  1. 直接在 serviceThreeRespCF 上

    /li>
  2. 使用 thenRunAsync

    /li>

编辑 2:我尝试使用 allOf 在可完成的未来获取 service3 完成阶段的值。(这件作品是在服务2 thenCompose之后)。可以看出,service2 响应不可用于这个可完成的未来并且它不起作用。除此之外,这还涉及必须遍历计划列表 2 次。还有另一种方法可以做到这一点吗?

0 投票
0 回答
212 浏览

java - 如何在 play-framework 2.6 中从 CompletionStage 获取 json 对象

我需要从以下代码中获取 json 对象

}

我怎样才能得到我正在做的json对象

但它给了

我怎样才能做到这一点?

0 投票
2 回答
121 浏览

java - Java:被覆盖的方法不会抛出“java.lang.Throwable”

我收到以下编译时错误

这是代码:

我正在使用游戏framework 2.6

0 投票
2 回答
1411 浏览

java - 是否有来自 List 的转换器到完成阶段在 Java 中?

就像在这个使用的假设示例中一样of

0 投票
0 回答
356 浏览

java - Spring WebFlux - 与 CompletionStages 集成

到目前为止,我一直在实现异步非阻塞 IO,CompletionStages但我现在正在尝试构建Spring-Webflux服务,同时尝试重用现有代码。

我有一个现有的 HttpClient ,它返回 aCompletionStage并且作为我的逻辑的一部分,我需要执行 3 个 HTTP 调用,每个都依赖于最后一个。我知道我可以将 a 转换CompletionStageMonousing Mono.fromCompetionStage,但我想知道如何流畅地组合调用,以便我的 Rest Controller 可以返回一个表示所有操作顺序的 Mono。

我知道,如果我只是在使用,CompletionStages我可以使用以下方法链接它们thenCompose

任何想法实现这一目标的最佳方法是使用Mono. 如果答案是CompletionStage从上面的代码中得到结果,Mono.fromCompletionStage我觉得没什么意义,因为Spring-Weblfux支持返回CompletionStages.

0 投票
0 回答
228 浏览

java - 链接几个CompletionStage,这在内存中是如何处理的?

我做了一个函数,称为allOfSequentialSupplierCombine(...)这个函数,它基本上接受一个linkedList承诺的供应商,然后它通过递归链接它们一个一个地执行承诺,然后它构建一个结果数组。

我一直在调试代码,我使用 Jprofiler 来分析内存并且没有任何异常,我一直在阅读有关如何在内存中处理承诺以及线程池如何工作的信息

我面临的问题是,如果我输入超过 2000 个供应商,该功能就会停止而没有任何错误。我期待它可能会在内存中创建太多线程,导致链被破坏。

任何人都可以帮助我了解链式承诺是如何存储在内存中的,jvm 是否创建了与承诺一样多的线程?

0 投票
2 回答
1417 浏览

asynchronous - 是否可以动态地将新的 CompletableFutures 添加到 CompletableFuture.allOf() ?

我有一个包含 3 个表的数据库:

表 A 包含 A 对象的数据
表 B 包含 B 对象的数据
表 C 包含 C 对象的数据

A 对象可以有 0 或 1 个 B 对象
B 对象可以有 0 或 1 个 C 对象
(我知道,这些可能只在一个表中,但仅用于示例)

我想从整个数据库中创建一个 csv 文件:每一行应该包含一个 A 对象,可选的 B 对象,以及可选的 C 对象。

对于每个表,都有一个异步存储库,它返回一个 CompletionStage。因此,当我从存储库 A 中获取 A 对象时,我得到了一个CompletionStage<List<A>>. 完成后,我为每个 A 对象制作一个 Map ,用 A 的数据填充它,然后调用repositoryB.getB(A.id),它返回 a CompletionStage<Optional<B>>。如果 B 值不存在,我会在我的 CSV 文件中追加一个新行,其中包含地图内的数据。如果 B 存在,我将其值添加到地图中,并调用repositoryC.getC(B.id)返回 a CompletionStage<Optional<C>>。如果存在 C,我将其值添加到 Map,并在 CSV 文件中添加新行,如果不存在,则添加新行。

当所有 CompletionStages 完成时,CSV 的创建就完成了。我尝试使用 CompletableFuture.allOf(),但由于一开始我不知道会有多少 CompletionStages,我无法将它们全部添加到 allOf 方法中,所以我认为我需要添加以某种方式动态完成阶段。可能吗?

目前我有一个可行的解决方案,但它在每次 B 和 C 提取后都会阻塞,所以我想让整个代码成为非阻塞的。

这是我的非阻塞尝试,但效果不佳,因为某些 B 和 C 期货未添加到期货列表中,因此代码不会等待它们完成:

0 投票
0 回答
188 浏览

java - 如何从 CompletionStage 转换结果

我访问一个 API,它返回结果为成功,但我想将结果转换为 type integer,当我尝试时,它显示错误

无法从完成阶段转换为整数

我的代码

0 投票
2 回答
1179 浏览

java - Why the main thread doesn't terminate when there is a completion stage that has not been completed?

This is my simple code:

The output of the execution is:

But the thing is: the main thread doesn't terminate immediately, it waits for 50000 milliseconds. that is my question. I understood that it should terminate because there is no more things to execute.

Initially I thought that the reason is that the "sleep" is being executed in the main thread, and that's why I printed the names of the threads, and they're two different threads.

Help is appreciated.

0 投票
0 回答
109 浏览

java - 为什么 thenApply 和 thenApplySync 在完成阶段不起作用

首先,很明显我不太了解thenApply,这就是为什么我会遇到编译器错误,但我尝试搜索却找不到。

这是我的简单代码:

thenApplySync我得到这个编译器错误:

getPlayer方法已经返回一个完成阶段,那有什么问题呢?

我知道

如果我这样做:return getPlayer(p.getId()).toCompletableFuture().get();它会起作用,但我不明白为什么。在我看来,我应该返回完成阶段,而不是对象。

帮助表示赞赏。