ctx.commandFailed vs投掷PersistentEntity

时间:2017-02-06 02:28:12

标签: lagom

Auction Example中,我见过ctx.commandFailed(...)throw SomeException(...)。是否有充分的理由抛弃而不是使用API​​,两者之间是否存在差异?

1 个答案:

答案 0 :(得分:1)

持久化实体命令处理程序和持久化回调被包装在try/catch块中,如果发现异常,它会将该异常传递给ctx.commandFailed(...)

要明白两者之间存在细微差别。如果抛出异常,处理命令当然会立即停止。但是,如果您将异常传递给ctx.commandFailed(...),那么会将异常发送回命令的调用者,但是它不会停止处理。理论上你可以继续返回一些指令来坚持事件 - 这将是一件奇怪的事情。实际上,您需要做的是在调用ctx.done后返回ctx.commandFailed(...)

一般来说,简单地抛出异常可能更简单,更安全。