如何分支 Mono,以便在 hasElement 时主进程处于 null 和类似错误的进程?
How to branch Mono so main process is on null and error-like process when hasElement?
我正在尝试理解响应式范例,但逻辑似乎与我的需求背道而驰。
情况是注册过程的早期阶段:从注册数据开始,检查提供的电子邮件是否存在帐户(取回 AccountDto
或 null
)并处理来自那里。使用命令式方法,这很容易;在 account == null
上分支。但是对于反应式范式,我无法理解它。
如果我正在处理 account
并用某些东西代替 null
的情况,那会很好。但在这种情况下,它实际上是颠倒的:当我回来时 null
– 即不存在帐户 – 我想进行主要处理以创建帐户,而当它不存在时 null
,我想使用错误等效回退。
我发现唯一可行的方法是首先使用命令式分支来包装反应性元素,每个:
public ResponseDto registerAccount (RegistrationDto data)
ResponseDto responseDto = new ResponseDto ();
if (accountExists(data.getEmail()) {
// return responseDto with account-exists error messaging
} else {
// create the account, send verification email, etc
// return responseDto with information that verification is sent
}
}
public boolean accountExists (String email) {
return retrieveAccount(email)
.hasElement().block();
}
public Mono<AccountDto> retrieveAccount (String email) {
// calls db service; returns either the Mono-wrapped AccountDto or Mono-wrapped null.
}
考虑到我被推下了反应路径,我宁愿避免这种混合方法。
如果处理主体取决于 Mono
是否为空,而当它有内容要处理时相当于错误状态,我该如何处理结果?
你只差 flatMap
反应路径:
public Mono<ResponseDto> registerAccount(RegistrationDto data) {
return retrieveAccount(data.getEmail())
.hasElement()
.flatMap(accountExists -> {
if (accountExists) {
// return responseDto with account-exists error messaging
} else {
return createAccount(data);
}
});
}
public Mono<AccountDto> retrieveAccount(String email) {
// calls db service; returns either the Mono-wrapped AccountDto or Mono-wrapped null.
}
private Mono<ResponseDto> createAccount(RegistrationDto data) {
// create the account, send verification email, etc
// return responseDto with information that verification is sent
}
我正在尝试理解响应式范例,但逻辑似乎与我的需求背道而驰。
情况是注册过程的早期阶段:从注册数据开始,检查提供的电子邮件是否存在帐户(取回 AccountDto
或 null
)并处理来自那里。使用命令式方法,这很容易;在 account == null
上分支。但是对于反应式范式,我无法理解它。
如果我正在处理 account
并用某些东西代替 null
的情况,那会很好。但在这种情况下,它实际上是颠倒的:当我回来时 null
– 即不存在帐户 – 我想进行主要处理以创建帐户,而当它不存在时 null
,我想使用错误等效回退。
我发现唯一可行的方法是首先使用命令式分支来包装反应性元素,每个:
public ResponseDto registerAccount (RegistrationDto data)
ResponseDto responseDto = new ResponseDto ();
if (accountExists(data.getEmail()) {
// return responseDto with account-exists error messaging
} else {
// create the account, send verification email, etc
// return responseDto with information that verification is sent
}
}
public boolean accountExists (String email) {
return retrieveAccount(email)
.hasElement().block();
}
public Mono<AccountDto> retrieveAccount (String email) {
// calls db service; returns either the Mono-wrapped AccountDto or Mono-wrapped null.
}
考虑到我被推下了反应路径,我宁愿避免这种混合方法。
如果处理主体取决于 Mono
是否为空,而当它有内容要处理时相当于错误状态,我该如何处理结果?
你只差 flatMap
反应路径:
public Mono<ResponseDto> registerAccount(RegistrationDto data) {
return retrieveAccount(data.getEmail())
.hasElement()
.flatMap(accountExists -> {
if (accountExists) {
// return responseDto with account-exists error messaging
} else {
return createAccount(data);
}
});
}
public Mono<AccountDto> retrieveAccount(String email) {
// calls db service; returns either the Mono-wrapped AccountDto or Mono-wrapped null.
}
private Mono<ResponseDto> createAccount(RegistrationDto data) {
// create the account, send verification email, etc
// return responseDto with information that verification is sent
}