当前位置: 首页 > 知识库问答 >
问题:

当hasElement时,如何分支Mono以使主进程位于空进程和类似错误的进程上?

端木承业
2023-03-14

我试图理解反应性范式,但逻辑似乎与我的需求背道而驰。

这种情况是注册过程的早期阶段:从注册数据开始,检查提供的电子邮件是否存在帐户(将帐户返回到或null)并从那里进行处理。使用命令式方法,这很容易;账户上的分支==null。但对于反应型范式,我无法理解。

如果我正在处理帐户,并用中的某个内容替换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.
}

考虑到我正被推下被动路径,我宁愿避免这种混合方法。

如果处理的主体取决于单声道为空,而错误状态的等价物是当它有要处理的内容时,我该如何处理结果?


共有1个答案

林德辉
2023-03-14

您离反应路径只有一步之遥:

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
}
 类似资料:
  • 本文向大家介绍Java如何获取当前进程ID以及所有Java进程的进程ID,包括了Java如何获取当前进程ID以及所有Java进程的进程ID的使用技巧和注意事项,需要的朋友参考一下 首先是获取当前Java运行的Java进程ID,这个是网上常见的,也就是Java程序自身将进程ID打印出来: 运行结果: ManagementFactory是一个在运行时管理和监控Java VM的工厂类,它能提供很多管理V

  • 在 Electron 中,运行 package.json 主脚本的过程称为主进程 (main process)。在主进程中运行的脚本可以通过创建网页来显示其图形化界面。 摘自 Electron 文档 由于 main 进程本质上是一个完整的 node 环境,所以除了以下两个文件之外,并没有什么初始的项目结构。 src/main/index.js 这个文件是你应用程序的主文件,electron 也从这

  • 问题内容: 我想使用模块来完成此操作。 当我这样做时,例如: 我启动一个父进程,然后让父进程产生一个子进程, 然后我希望父进程退出自身,但子进程继续工作。 请允许我写一个 错误 代码来解释一下自己: 那么,我如何启动一个在父进程完成时不会被杀死的进程? 20140714 大家好 我的朋友刚刚告诉我一个解决方案… 我只是想… 无论如何,只要让您看到: 这确实有效!! 问题答案: 一个技巧:调用以退出

  • 进程(process)是正在运行的程序的实例,但一个程序可能会产生多个进程。比如,打开 Chrome 浏览器程序,它可能会产生多个进程,主程序需要一个进程,一个网页标签需要一个进程,一个插件也需要一个进程,等等。 每个进程都有自己的地址空间,内存,数据栈以及其他记录其运行状态的辅助数据,不同的进程只能使用消息队列、共享内存等进程间通讯(IPC)方法进行通信,而不能直接共享信息。 fork() 在介

  • 问题内容: 我想产生长时间运行的子进程,这些子进程在主进程重新启动/死亡时仍然存在。从终端运行时,这工作正常: 请注意,父进程被杀死后,子进程仍处于活动状态。但是,如果我像这样从systemd启动主进程… …然后当我杀死主要过程时,孩子也死了: 我怎样才能使孩子生存呢? 在CentOS Linux版本7.1.1503(Core)下运行go版本go1.4.2 linux / amd64。 问题答案:

  • 问题内容: 我正在使用ProcessBuilder启动子进程,并且如果父进程确实需要退出子进程。在正常情况下,我的代码可以正确阻止孩子。但是,如果我导致操作系统杀死父进程,则子进程将继续运行。 有什么方法可以将子进程“绑定”到父进程,以便在父进程被杀死时退出? 问题答案: 子进程与其父进程之间没有联系。他们可能彼此知道进程ID,但是它们之间没有硬连接。您在谈论孤立过程。这是操作系统级别的问题。意味