我需要进行异步调用,并使用其中存在的一些值对同一服务进行多次调用。将这些调用的响应与第一个调用结合起来,然后返回。
例如,当我第一次调用时,我会在JSON下面看到一个ID列表。现在,我必须使用这些ID对一个服务进行多次调用,并列出它们的响应列表,然后通过在同一个JSON中添加它们将其发送到下游。
{“id”: 145,
“object”:[{“id”:111}]
}
我试过使用zipWhen和
Flux.fromIterable(userIds).parallel().runOn(Schedulers.elastic()).flatMap()
但是结果列表总是以空或空的形式出现。我们如何才能做到这一点?我是不是漏了什么?
Edit1:通过使用Flux.fromIterable
解决它。阅读更多关于它的信息,最终理解了它的用途并解决了它。下面的方法占用列表中的一个项目,并将调用将调用多个API的内部方法:
return Flux.fromIterable(somelist).flatMap(listItem -> {
return someMethodToCallAnotherAPIUsingZipWith(listItem);
}).collectList();
内部方法:它调用第一个API,将其结果传递给zipWith,使用此结果我们可以调用另一个API,也可以简单地将其与响应一起使用。
private Mono<Object> someMethodToCallAnotherAPIUsingZipWith(String listItem) {
return authService.getAccessToken().flatMap(accessToken ->
webClient.get().uri(builder -> builder.path("/path").build(listItem))
.header(HttpHeaders.AUTHORIZATION, accessToken)
.retrieve()
.toEntity(Entity.class).log()
.flatMap(entity -> {
//manipulate your response or create new object using it
return Mono.just(entity);
}).zipWhen(consent -> webClient.get().uri(builder -> builder.path("/otherpath").build(listItem))
.header(HttpHeaders.AUTHORIZATION, accessToken)
.retrieve().bodyToMono(Entity.class).log()
.flatMap(entity -> {
//example
listItem = entity.getString();
return Mono.just(listItem);
}), (string1, string2) -> string1 + string2));
}
private Mono<Object> someMethodToCallAnotherAPIUsingZipWith(String listItem) {
return authService.getAccessToken().flatMap(accessToken ->
webClient.get().uri(builder -> builder.path("/path").build(listItem))
.header(HttpHeaders.AUTHORIZATION, accessToken)
.retrieve()
.toEntity(Entity.class).log()
.flatMap(entity -> {
//manipulate your response or create new object using it
return Mono.just(entity);
}).zipWhen(consent -> webClient.get().uri(builder -> builder.path("/otherpath").build(listItem))
.header(HttpHeaders.AUTHORIZATION, accessToken)
.retrieve().bodyToMono(Entity.class).log()
.flatMap(entity -> {
//example
listItem = entity.getString();
return Mono.just(listItem);
}), (string1, string2) -> string1 + string2));
}
问题内容: 使用promise API,如何并行发送两个异步请求,以及如何将合并的结果解析为响应。 现在,当我像这样调用get()时 我需要获得指示的合并结果。如何使用Angular promise API做到这一点? 问题答案: 正如@Matt所说,您需要使用,但用法并不完全正确。AngularJS不支持,并且它们无论如何都不能那样工作,因为没有诸如对多个值的承诺之类的东西,相反,您仅对数组有一
我调用了多个ajax调用,但代码只在所有ajax调用执行之后才到达API。 JavaScript: AppFactory API 链接工作很好,但我需要运行两个独立,我真的想知道发生了什么。 谢谢!!!
问题内容: 根据该文件对中,它说: 以ResultSet对象的形式检索当前结果。每个结果仅应调用此方法一次。 使用一些测试代码,我运行并多次调用,并观察到返回的对象指向同一个对象。因此,我猜测它不会返回您需要单独关闭的其他内容。但是,当然这对于我的JDBC驱动程序可能是唯一的。 纵观文档的,它说: 默认的ResultSet对象是不可更新的,并且具有仅向前移动的光标。因此,您只能迭代一次,并且只能从
我正在使用的应用程序将按以下顺序使用2个REST web服务: 1) 计数记录-了解特定时间范围内的记录数。 2)获取记录——一旦我们有了记录的数量,我们就需要调用这项服务。但是这项服务有一个门槛来一次性获取10K记录。假设第一个服务在特定的时间间隔内告诉我,它有100K的记录,那么我需要以分页方式调用第二个网络服务10次,考虑到它的阈值是一次10K的。 因此,如果我将进行10次同步调用,我的应用
我搜索了许多网站和文档,但异步调用使用的代码相同。但不确定为什么它不起作用。如果我错过了什么,有人能帮我吗?
问题内容: 我在自己的类中拥有所有异步调用,因此我不想将aync’ly设置为全局变量。为此,我想从我的asunc postProcess方法返回对象,例如字符串。 能做到吗? 下面是我类的一般结构,例如,我想从onPostExecute()返回一个字符串。我看到在其他地方提到了委托,但这似乎很混乱,确定有办法为类或方法提供返回类型吗? 问题答案: 像下面这样 和听众课 你可以这样打电话