1

拍卖示例中,我看到了ctx.commandFailed(...)throw SomeException(...)。是否有充分的理由抛出而不是使用 API,两者之间有区别吗?

4

1 回答 1

1

持久实体命令处理程序和持久回调被包装在try/catch块中之后,如果捕获到异常,它将将该异常传递ctx.commandFailed(...)给您。

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

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

于 2017-02-06T22:38:41.553 回答