>source

다음 모노를 제공하십시오 :

Mono<Void> mono1 = Mono.fromRunnable(() -> {
    System.out.println("sleep1");
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        throw new IllegalStateException(e);
    }
    System.out.println("mono1");
});
Mono<Void> mono2 = Mono.fromRunnable(() -> {
    System.out.println("mono2");
});
Mono<Void> mono3 = Mono.fromRunnable(() -> {
    System.out.println("mono3");
});

둘 다 :

mono1
        .then(mono2)
        .then(mono3)
        .block();

그리고 :

mono1
        .and(mono2)
        .and(mono3)
        .block();

같은 결과를 얻습니다 :

sleep
mono1
mono2
mono3

Mono#thenMono#and 이 경우

<시간>

에서 https://projectreactor.io/docs/ core/release/reference/index.html # which-operator :

[If you] have a sequence but [you are] not interested in values and [you] want to switch to another Mono at the end, [use] Mono#then(mono) .

     

[당신이 1 개의 모노와 모든 소스에서 모노로의 종료를 조정하여 출판사를 합치려면, [사용] Mono#and .

이것은 #and 가있는 사례를 찾는 데 도움이되지 않습니다  그리고 #then  불행히도 다르게 행동 할 것입니다.


  • 답변 # 1

    Mono#and  단지 "현재 모노 및 다른 소스로부터의 리턴 신호를 리턴 된 보이드 모노에 결합시킨다". 항상 Mono<Void> 를 반환합니다.  오직 두 개의 Mono 의 종료를 조정할 수 있습니다 s.

    Mono#then  당신이 두 Mono 를 체인 할 수 있습니다 함께하고 최종 결과는 Mono 에 의해 결정됩니다  매개 변수로 전달되었습니다. 이런 의미에서, Mono#then   Mono#flatMap 의 더 원시적 인 버전입니다 유일한 차이점은 Mono#flatMap 의 내부입니다.  당신은 이전 Mono 의 결과에 액세스 할 수 있습니다  다른 Mono 로 변환 할 수있는 체인  인스턴스.

    그 외에도 Mono#then   Mono#and 와 함께 작업이 순차적으로 실행됩니다.  주문에 대한 보장은 없습니다 (적어도 문서에서).

  • 이전 aggregate - R에서 범주 열을 롤업하는 동안 여러 열의 평균을 얻는 방법은 무엇입니까?
  • 다음 python - 하나의 배열 (각 키) 만있는 사전에서 여러 배열 (각 키)을 가진 사전을 만듭니다