当前位置: 首页 > 知识库问答 >
问题:

如何使用React(Spring WebClient)模拟for循环

劳亦
2023-03-14

我是相当新的Reactor(Spring5 WebClient),虽然我已经想出了如何做简单的请求和处理它的输出与地图或平面图,我现在需要做一个有点困难的任务:

我有一个无法改变的终点。

这个endpoint调用的基本签名是Get{host}/{endpointName}?系统={1到3之间的整数}

我需要反复调用它,并处理这对的输出:

{1, 1},
{1, 2},
{1, 3},
{1, 4},
...
{3, 2},
{3, 4},
{3, 5}

对于一个请求,例如:

WebClient.create().get()
  .uri(uri -> uri.scheme("http")
    .host(myHost)
    .path(myPath)
    .queryParam("System", 1)
    .queryParam("Form", 1)
    .build())
  .exchange()
  .flatMap(response -> {
   //process response and produce desired output
   });

我想做的是:1。提出多个请求(基本上是在包含上述所有对的映射上迭代)2。处理每个请求结果(处理后的结果被添加到WebClient之前创建的json数组中)3。当发出所有请求时,给出“组合输出”。

示例:如果组合1,1的请求给出

[
{
"Name":"John",
"Surname":"Doe"
}
]

第三对,第五对给出

[
{
"Name":"Jane",
"Surname":"Dean"
}
]

此WebClient调用的结果应为

[
{
"Name": "John",
"Surname: "Doe"
},
....
{
"Name": "Jane",
"Surname": "Dean"
}
]

我知道Mono的重试和重复机制,只是不知道如何使用“不同请求参数进行多个调用”部分。

这有可能吗?


共有1个答案

苏星宇
2023-03-14
匿名用户

使用Flux。范围与平面地图结合使用:


Flux.range(1, 5)
    .flatMap(i -> Flux.range(1, 5).map(j -> Tuples.of(i, j)))
    .flatMap(t ->
        WebClient.create().get()
            .uri(uri -> uri.scheme("http")
                .host(myHost)
                .path(myPath)
                .queryParam("System", t.getT1())
                .queryParam("Form", t.getT2())
                .build())
            .exchange()
    )
    .flatMap(response -> /* Handle the response... */)

如果我在上面的例子中计算的元组存储在映射中


Flux.fromIterable(intIntMap.entrySet())
    .flatMap(entry ->
        WebClient.create().get()
            .uri(uri -> uri.scheme("http")
                .host(myHost)
                .path(myPath)
                .queryParam("System", entry.getKey())
                .queryParam("Form", entry.getValue())
                .build())
            .exchange()
    )
    .flatMap(response -> /* Handle the response... */)

使用这些方法,您将永远不会离开函数世界,从而得到更干净、更简洁的代码。

 类似资料:
  • 我正在使用反应和电子构建桌面应用程序。由于它增长迅速,我意识到我需要某种状态管理,如Redux,以避免在组件之间传递许多属性。我开始阅读Redux官方留档,但仍然不知道如何在我的情况下实现它。我卡住了! 例如,我有一个呈现许多子组件的主组件。其中一个有按钮。点击后,它应该向商店发送一个“事件”,以便主可以执行相应的操作。我怎样才能做到这一点?我找不到事件的概念,我已经在如何开始使用Redux上碰壁

  • 你能帮助我,如何在代码中添加“for”循环吗?目标是从所有注释中只显示3条注释,这些注释是用.map扫描的。 我试着把它放在这里,但我发现它在JSX中不起作用。 或者你会推荐用另一种方式来解决任务?

  • 问题内容: 我使用的是react-router,因此我将组件用于整个应用程序中的链接,在某些情况下,我需要根据用户输入动态生成链接,因此需要类似的内容 ,但无需刷新页面。 我发现了这个小笔记-(https://github.com/rackt/react- router/issues/835 )-我尝试使用,但是上下文有问题… 这导致我(https://github.com/rackt/react

  • 问题内容: 我有一个包含以下代码段的受测试方法: 我的单元测试代码如下所示: 问题是,在运行测试时,测试代码永远不会进入for循环。我应该在什么时候指定条件才能进入for循环?目前,我已指定,但我猜它从未使用过。 问题答案: 您的问题是,在for-each循环中使用集合时,将调用其方法;而且您还没有使用该特定方法。 我强烈建议您传递一个真实的列表,而不是模拟列表,该列表中的元素只是您的模拟对象,您

  • 我想设置每个React组件相对于它在数组中的索引的顶部样式,但是,我不确定如何正确地访问和设置属性。我将使用state设置它们,但是,包含我要操作的元素的节点是来自我正在编辑的节点的兄弟节点的子节点。有什么办法能有效地做到这一点吗? 'Portfoliet-Item'类应用于每个元素,我以这种方式选择每个元素,因为我认为我无法访问实际的React组件,因为它位于同级节点树中。 提前道谢!

  • 是否可以在Visual Studio模拟器for Android(独立)上运行react原生应用程序,如果可以,有什么步骤来设置它?我可以成功地启动模拟器,这部分工作,但不知道如何配置react-native来使用它而不是“ADB设备”。 我当前的尝试以错误结束:无法调试。执行命令“adb devices”时出错:命令失败:adb devices“adb”未被识别为内部或外部命令、可操作程序或批处