【发布时间】:2021-10-13 07:27:01
【问题描述】:
我正在尝试将订阅者 Context 传递给在 doOnNext 内部调用的 fireAndForget 方法。 fireAndForget 也是异步非阻塞运行的。如何传递此上下文以使“键”的值存在?当我运行以下测试时,它通过了。但是,在日志中我可以看到doOnNext 我得到了:
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.util.NoSuchElementException: 上下文为空
@Test
void shouldPassContextToFireAndForget() {
final Mono<String> helloWorldMono = Mono.just("hello")
.doOnNext(this::fireAndForget)
.doOnNext(name -> Mono.deferContextual(contextView -> fireAndForget(contextView, name)).subscribe())
.flatMap(name -> Mono.deferContextual(contextView -> Mono.just(name + " " + contextView.get("key"))))
.contextWrite(Context.of("key", "world"));
StepVerifier.create(helloWorldMono)
.expectNext("hello world")
.verifyComplete();
}
private Mono<String> fireAndForget(ContextView context, String name) {
return Mono.just(name)
.flatMap(value -> Mono.deferContextual(contextView -> Mono.just(value + contextView.get("key"))))
.contextWrite(context);
}
private void fireAndForget(String name) {
Mono.just(name)
.flatMap(value -> Mono.deferContextual(contextView -> Mono.just(value + contextView.get("key"))))
.subscribe();
}
【问题讨论】:
标签: java reactive-programming project-reactor