ctx.commandFailed 与投入 PersistentEntity

ctx.commandFailed vs throwing in PersistentEntity

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

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

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

之后

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