Как манипулировать объектами, поступающими из Flux < Object > со значением, полученным из метода, испускающего Mono < Items > неблокирующим способом?

Я хотел, чтобы div выглядел как 3D-сфера и переходил через цвета. Я обнаружил, что цвета фона градиента не переходят (пока). Я поместил радиальный градиентный фон перед элементом (используя z-индекс) с переходным сплошным фоном.

/* overlay */
z-index : 1;
background : radial-gradient( ellipse at 25% 25%, rgba( 255, 255, 255, 0 ) 0%, rgba( 0, 0, 0, 1 ) 100% );

, затем div.ball внизу:

transition : all 1s cubic-bezier(0.25, 0.46, 0.45, 0.94);

затем изменил цвет фона div.ball и вуаля!

https://codepen.io/keldon/pen/dzPxZP

1
задан Ashish 17 January 2019 в 13:32
поделиться

1 ответ

Попробуйте flatMap или concatMap

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

Flux<Object> test {

 method1().flatMap(obj -> {
        if (obj.getTotalItems() > 20) {
            return method2(obj)
                     .map(result -> {
                        obj.setItems(result);
                        return obj;
                     });
        }
        return Mono.just(obj);
  });
}

flatMap позволяет сгладить несколько потоков одновременно Таким образом, в случае длительных операций вы можете использовать более эффективные элементы процесса.

Одним из недостатков flatMap является то, что он не сохраняет порядок элементов, поэтому если у вас есть последовательность вышестоящих элементов, таких как [1, 2, 3, 4] с flatMap, есть вероятность, что порядок будет изменен из-за асинхронной природы подпотоков .

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

Flux<Object> test {

 method1().concatMap(obj -> {
        if (obj.getTotalItems() > 20) {
            return method2(obj)
                     .map(result -> {
                        obj.setItems(result);
                        return obj;
                     });
        }
        return Mono.just(obj);
  });
}

Примечание

[1115 ] Мутация объектов таким способом - не лучшая идея, и я бы предпочел использовать неизменный объект объект-образец в реактивном программировании

0
ответ дан Oleh Dokuka 17 January 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: