Синтаксис для хранения результатов предыдущего отображения - PullRequest
0 голосов
/ 06 июня 2018

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

Mono.just(request)
...
.flatMap(object0 -> createObject1(object0))
.flatMap(object1 -> createObject2(object1))
...

, какой хороший способ получить object0 в этой точке, чтобы мы могли что-то добавитькак

.flatmap(object0 -> createResult(object0))

Я решил эту проблему, объединив оба этих метода, чтобы у нас был объект0 в глобальной переменной, но он выглядит не очень хорошо.

Другой пример

Mono.just(request)
...
.flatMap(object0 -> createResponse(object))
.map(result -> mapToObject1(result))
.flatMap(object1-> saveObject1(object1))

Как вернуть «результат» на этом этапе?

Не могли бы вы дать ссылку на хороший пример того же случая, потому что решение объединить эту строку, чтобы сделать результат глобальным, не выглядит хорошим, так как создает неоднозначные методы

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Для первого случая, поскольку вы используете flatMap для createObject1(object0), я предполагаю, что он возвращает Mono<Object1>, я думаю, что следующий фрагмент кода может сделать то, что вы хотели.

    public Mono<Class1> createObject1(Class0 object0) {
        //...
    }

    public Mono<Class2> createObject2(Class1 object1, Class0 object0) {
        //...
    }

    public void test() {
        Mono.just(new Class0())
        .flatMap(object0 -> createObject1(object0).zipWith(Mono.just(object0)))
        .flatMap(tuple -> createObject2(tuple.getT1(), tuple.getT2()));
    }

Во втором случае, как предполагает принятый ответ, подойдет reactor.util.function.Tuples в map.

0 голосов
/ 06 июня 2018

Вы можете обернуть несколько объектов в reactor.util.function.Tuples, например:

Mono.just(request)
...
.flatMap(object0 -> Tuples.of(object0, createObject1(object0)))
.flatMap(tuple -> createObject2(tuple.getT2()))
...

Я не знаю, действительно ли это лучший способ, потому что ваш фрагмент кода очень универсален, и я могу 'сказать, является ли это проблемой с базовым API.

...