在Auction Example中,我见过ctx.commandFailed(...)
和throw SomeException(...)
。是否有充分的理由抛弃而不是使用API,两者之间是否存在差异?
答案 0 :(得分:1)
持久化实体命令处理程序和持久化回调被包装在try/catch
块中,如果发现异常,它会将该异常传递给ctx.commandFailed(...)
。
要明白两者之间存在细微差别。如果抛出异常,处理命令当然会立即停止。但是,如果您将异常传递给ctx.commandFailed(...)
,那么会将异常发送回命令的调用者,但是它不会停止处理。理论上你可以继续返回一些指令来坚持事件 - 这将是一件奇怪的事情。实际上,您需要做的是在调用ctx.done
后返回ctx.commandFailed(...)
。
一般来说,简单地抛出异常可能更简单,更安全。