我是反应式编程的新手,为了让我亲自动手,我正在尝试构建一个接近真实的示例。
当您看到 reactor 教程时,它们会向您展示非常简单的示例,例如。
return userRepository.findById(1);
Run Code Online (Sandbox Code Playgroud)
或诸如处理通量之类的东西,打破“棕色小狐狸”字符串并找到独特的字母等。但大多数这些教程都坚持单个对象,不幸的是我找不到任何指导线或教程来显示并排示例相同的代码首先是命令式,然后是反应式,这就是为什么我看到许多反应式编程的新手面临很多学习问题。
但我的观点是在现实生活中的应用程序中,我们处理多个对象,如下面我在 reactor 中编写的示例代码。为我仍在学习的错误代码道歉。
public Mono<ServerResponse> response(ServerRequest serverRequest) {
return
Mono.just(new UserRequest())
.map(userRequest -> {
Optional<String> name = serverRequest.queryParam("name");
if (name.isPresent() && !name.get().isEmpty()) {
userRequest.setName(name.get());
return userRequest;
}
throw new RuntimeException("Invalid name");
})
.map(userRequest -> {
Optional<String> email = serverRequest.queryParam("email");
if (email.isPresent() && !email.get().isEmpty()) {
userRequest.setEmail(email.get());
return userRequest;
}
throw new RuntimeException("Invalid email");
})
.map(userRequest -> {
userRequest.setUuid(UUID.randomUUID().toString());
return userRequest;
})
.flatMap(userRequest ->
userRepository
.findByEmail(userRequest.getEmail())
.switchIfEmpty(Mono.error(new RuntimeException("User not found")))
.map(user -> Tuples.of(userRequest, user))
) …Run Code Online (Sandbox Code Playgroud)