2016-11-28 2 views
1

Я пытался изменить несколько образцов реактора от here, и я немного смущен поведением, которое я получаю.Использование реакторов doOnNext несколько раз

Так первый код, который я так:

EmitterProcessor<String> stream = EmitterProcessor.<String>create().connect(); 
    Flux<String> flux = stream 
      .doOnNext(s -> System.out.println("1 " + s)) 
      .doOnNext(s -> System.out.println("2 " + s)); 
    flux.subscribe(); 
    stream.onNext("Hello"); 

Этого код печатает две строки, как и ожидались:

1 Hello 
2 Hello 

Но если добавить промежуточное Название переменного делая вид, получить его от каких-то метод или для удобства чтения код начинает вести себя по-разному.

EmitterProcessor<String> stream = EmitterProcessor.<String>create().connect(); 
    Flux<String> flux = stream 
      .doOnNext(s -> System.out.println("1 " + s)); 
    flux .doOnNext(s -> System.out.println("2 " + s)); 
    flux.subscribe(); 
    stream.onNext("Hello"); 

Так что для кода выше, я получаю только одну строку, то есть:

1 Hello 

Кто-нибудь может объяснить такое поведение?

ответ

1

Благодаря Стефану Мальдини я понял, что Flux неизменен, и каждая операция производит разные потоки. Обсуждение here

Смежные вопросы