В документации, которую вы связали, это объясняется непосредственно после примера ?
Это законный способ сделать это:
observer.onNext(1).map {
case Continue =>
// We have permission to continue
observer.onNext(2)
// No back-pressure required here
observer.onComplete()
Stop
case Stop =>
// Nothing else to do
Stop
}
Как вы можете видеть в комментарияхпроблема в обратное давление .Так почему же есть пример использования .dump
, который кажется недопустимым?
Обратите внимание на комментарии в этом примере:
//=> 0: O-->1
// res0: Ack = Continue
Эти комментарии показывают, что вы получите, если вы запуститеэто в Scala REPL.Когда вы вводите выражение и нажимаете return, REPL печатает что-то вроде res0
и сообщает вам, какое значение было возвращено последней командой.
Итак, этот пример демонстрирует:
- Подача Наблюдателя из REPL
- , который каждый
.onNext
завершил с Continue
Было бы неправильно написать программу, которая будет кормить Обозревателя в этомкстати, но это правильная транскрипция законного выполнения кормления наблюдателя.
Вы можете увидеть правила, относящиеся к противодавлению, под Контрактный раздел :
Обратное давление: каждый вызов onNext ДОЛЖЕН ждать результата Continue, возвращаемого Future [Ack] предыдущего вызова onNext. Обратное давление для onComplete и onError является необязательным: при вызове onComplete или onErrorвам не нужно ждать будущего [Ack] предыдущего onNext.
Это хороший момент, на котором стоит остановиться, поскольку элегантное управление обратным давлением является одним из больших обещанийреактивные потоки.