gpt4 book ai didi

java - 在 mono.compose() 内部添加 doOnSuccess() 与简单的 mono.doOnSuccess() 有什么好处

转载 作者:行者123 更新时间:2023-12-02 01:57:45 25 4
gpt4 key购买 nike

研究 Spring 执行器MetricsWebFilter

看到了这段代码:

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange).compose((call) -> filter(exchange, call));
}

private Publisher<Void> filter(ServerWebExchange exchange, Mono<Void> call) {
long start = System.nanoTime();
ServerHttpResponse response = exchange.getResponse();
return call.doOnSuccess((done) -> success(exchange, start))
... more code ...
}

如果没有 compose() 映射会有什么不同吗?

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange).doOnSuccess( ... ) ... more code...
}

我的线索是,与 transform() 相比,compose() 对每个订阅者执行一次。然而,doOnSuccess() 也会为每个订阅者执行一次。

使用 filter(...) 函数而不是内联代码只是为了方便吗?

最佳答案

这在可读性方面有几个小好处:

  • 代码更好地封装在过滤器方法中
  • 调用更具可读性(在发生转换时读取)。与传统调用该方法相比:return filter(exchange, chain.filter(exchange))

但在我看来,更重要的一点是 compose 是特定于订阅者的。因此,filter(exchange, call) 将在每个订阅上调用。因此开头的计时代码将是相关的;)

关于java - 在 mono.compose() 内部添加 doOnSuccess() 与简单的 mono.doOnSuccess() 有什么好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com