这有什么问题吗?
public static void test3() {
Mono<String> mono = Mono.just("");
System.out.println(mono);
for(int i=1; i<10; i++) {
mono = updateMono(mono, i);
System.out.println(mono);
}
mono.subscribe((s) -> System.out.println(s));
}
private static Mono<String> updateMono(Mono<String> mono, int i) {
return mono
.flatMap(s -> {
if (i % 2 == 0) {
return Mono.just(s + "-" + Integer.toString(i));
} else {
return mono;
}
});
}
它打印出预期的输出
-2-4-6-8
我想我是在问是否有什么意想不到的或副作用,我没有考虑
1条答案
按热度按时间snz8szmq1#
这里的主要问题似乎是使用命令式循环来更新
mono
参考文献。它本身没有什么问题,但我发现从样式的Angular 来看,如果可能的话,最好避免使用它—这意味着不能只返回单个React链,必须声明它,强制修改任意次数,然后返回它。
很明显,这是一个人为的例子,但通常有不同的策略,你可以采取,导致更清晰的代码,视情况而定:
你可以选择使用
Flux
减少它,比如:您可以将循环重构成一个单独的方法,然后使用
transform
,引用该方法,以至少保持主React链的流继续;如果“真实世界”的示例更自然地是递归的,而不是迭代的,那么切换到使用
Flux
然后利用expand()
或者expandDeep()
是最合乎逻辑的选择。当然,如果它看起来很清楚,并且你对此感到满意,那么在React式管道中肯定有更糟糕的事情可以做——但是在我遇到的大多数实际案例中,通常有一种更好的方式来表示问题,从而避免了对命令式循环的需要。