每当我需要将数据传递到反应链时,我最终都会做这样的事情:
public Mono<String> doFooAndPassDtoAsMono(Dto dto) {
return Mono.just(dto)
.flatMap(dtoMono -> {
Mono<String> result = // remote call returning a Mono
return Mono.zip(Mono.just(dtoMono), result);
})
.flatMap(tup2 -> {
return doSomething(tup2.getT1().getFoo(), tup2.getT2()); // do something that requires foo and result and returns a Mono
});
}
Run Code Online (Sandbox Code Playgroud)
给定以下示例 Dto 类:
class Dto {
private String foo;
public String getFoo() {
return this.foo;
}
}
Run Code Online (Sandbox Code Playgroud)
因为一直压缩数据以将其传递到链上(尤其是向下几个级别)通常会很乏味,我想知道是否可以简单地直接引用,dto如下所示:
public Mono<String> doFooAndReferenceParam(Dto dto) {
Mono<String> result = // remote call returning a Mono
return result.flatMap(result -> {
return doSomething(dto.getFoo(), result); // do something that requires foo and result and returns a Mono
});
}
Run Code Online (Sandbox Code Playgroud)
我对第二种方法的担忧是,假设订阅者在线程池上订阅了这个 Mono,我是否需要保证 Dto 是线程安全的(上面的例子很简单,因为它只携带 a,String但如果不是的话怎么办)?
另外,哪一种被认为是“最佳实践”?
根据您分享的内容,您可以简单地执行以下操作:
public Mono<String> doFooAndPassDtoAsMono(Dto dto) {
return Mono.just(dto.getFoo());
}
Run Code Online (Sandbox Code Playgroud)
您在第一个选项中使用 zip 的方式无法解决任何目的。同样,第二个选项也不起作用,因为一旦单声道为空,则不会触发下一个平面地图。
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |