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

具有元素间相互依赖关系的反应式mono::zip

高德水
2023-03-14
Mono<String> a = Mono.just("A");
Mono<String> b = Mono.just("B");
Mono<String> c = Mono.just("C");
Mono<String> d = Mono.just("D");
Mono<String> ae = a.flatMap(am->Mono.just(am.concat("E")));
Mono.zip(a, b, c, d, ae).subscribe(System.out::println);

作为另一个想法:

Mono<String> monoA = Mono.just("A");
Mono<String> monoB = Mono.just("B");
Mono<String> a = something(monoA);
Mono<String> b = something(monoB);
Mono<String> c = something(monoA);
Mono<String> d = something(monoA);
Mono<String> ae = something(a);
Mono.zip(a, b, c, d, ae).subscribe(System.out::println);

更新:我可以添加一个例程来模拟调用API的用例,如下所示:

private Mono<String> getOne() {
    System.out.println("Here 1");
    return Mono.just("A");
}

然后我可以将第一行更改为下面建议的

Mono<String> a = Mono.from(getOne()).doOnNext(System.out::println);
Mono<String> a = Mono.from(getOne()).doOnNext(System.out::println);
Mono<String> b = Mono.just("B");
Mono<String> c = Mono.just("C");
Mono<String> d = Mono.just("D");
Mono.zip(a, b, c, d).flatMap(tuple4->{
    return Mono.just(tuple4.getT1().concat("E")).map(ae->{
        // here I have everything I need   
        return String.format("[%s,%s,%s,%s,%s]", tuple4.getT1(), tuple4.getT2(), tuple4.getT3(), tuple4.getT4(), ae);
    });
}).subscribe(System.out::println);

共有1个答案

钮高朗
2023-03-14

在flatmappublishera需要完成,直到您可以执行B,因此它将以串行方式执行。

当使用zip时,publisherA或B可以先完成或后完成,这并不重要,直到两者都完成后才会继续。它将并行运行。

您还可以研究zipwith函数,这是一种以串行方式组合发布者的方法。

 类似资料:
  • 问题内容: 我有一个在后端使用postgres数据库的项目,并且我正在创建一个Dockerfile,该文件可以自动设置数据库的本地开发实例。该数据库包含大量功能,并且这些功能在历史上一直存储在上下文相关的sql文件中,例如,users.sql,companys.sql。这样做很好,因为每当进行更改时,我都可以简单地执行所有视图和删除/重新创建所有函数的相关sql文件。 但是,当尝试在一个新的pos

  • 我有一个多模块Maven项目,其中包含子模块ModuleA和ModuleB等。ModuleA将ModuleB列为依赖项。但是,当仅构建模块A时,Maven不会解决模块B的依赖关系-导致。我想避免构建整个父级以使构建更快。目前我发现让它工作的唯一方法是使用exec插件和脚本,将父项目称为“ModuleB, ModuleA”,这意味着我必须在每次依赖项更改时更改脚本(例如添加ModuleC)。 是否有

  • 我知道循环依赖通常是不被鼓励的——然而,在C#和TypeScript中,我有时发现它们很有用。这可能是因为我缺乏python方面的经验,也可能是因为我的思维方式不对,或者是因为我没有找到谷歌应该使用的词语。我将如何解决以下问题? 我试图创建一个处理请求的类,每个处理事件都伴随着一个上下文。所以,我想创建handler类和context类,但它们是依赖的,linter在第2行给了我问题,说Handl

  • 我有一个spring boot反应式应用程序。如果用户还不存在,我想在其中实现创建用户。这样地: 我真正不喜欢的是我需要使用。有没有更好的方法? 最大的问题是两者都有循环依赖关系,因为UserRepository需要知道用户名,而userDTO stream需要知道这是否已经存在并返回mono。

  • DB是这样设置的。 AppDB AppLogDB AppAuditDB apparchivedb ... 我有一些例子,其中AppDB有引用其他表的视图/过程/等。也有其他DBs访问AppDB的情况(即ArchiveDB存储过程将从AppDB拉出)。 有了不同数据库之间的这种依赖关系,FlyWay是否可以按照所需的顺序处理迁移/清理?例如: 如果我有这样的脚本顺序 AppDB v1__create

  • 问题内容: 我已经搜索了很多,但是我发现的主要是python中的递归编程示例。因此,问题来了: 我该如何实现? 问题答案: 一切在Python中都是动态的-甚至是类声明。在初始声明之后,没有什么可以阻止您修改类的内容的: 注意:如果您不太熟悉Python,则该关键字仅允许您说“这里什么都没有”-除非A类的空值与本例中的一样空,否则它并不重要!