java - 如何同时调用所有 `Mono<E>`

标签 java kotlin rx-java reactive-programming

我想同时调用所有Mono并获取所有值。但下面的代码不足以满足这两个要求。如何实现这个?

@Test
fun test1() {
    val m1 = Mono.delay(Duration.ofSeconds(3)).thenReturn("v1").log()
    val m2 = Mono.delay(Duration.ofSeconds(3)).thenReturn("v2").log()

    // waits in 3 seconds but cannot get returned values
    val result = Mono.`when`(m1, m2).block()
    assertNull(result)
}

@Test
fun test2() {
    val m1 = Mono.delay(Duration.ofSeconds(3)).thenReturn("v1").log()
    val m2 = Mono.delay(Duration.ofSeconds(3)).thenReturn("v2").log()

    // can get returned value but requires 6 seconds to process
    val result = Flux.concat(m1, m2).collectList().block()
    assertEquals(listOf("v1", "v2"), result)
}

最佳答案

您可以使用zip功能:

val result = Mono.zip(m1, m2).block()

关于java - 如何同时调用所有 `Mono<E>`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57765210/

相关文章:

eclipse - 如何在Eclipse中使用sqlbrite和RxJava 1.x?

java - 为什么 "or"在 Java 中比 "and"慢?

java - 计算 Protocol Buffer 文件中的消息数

kotlin - 按顺序运行 Kotlin 协程

kotlin - 为什么委托(delegate)类方法getValue 和setValue 需要用operator 关键字标记?

android - RxJava2 找不到 Func0

java - 有什么方法可以从字节数组创建 URL 吗?

java - 滚动时自定义 ListView 中的微调器随机更改

android - 如何保存我的应用程序首选项并在重新安装或更改设备后检索它们

android - RxJava2 - 将多个 Singles 发出的结果组合成一个 Map