我有一个React.js应用程序,我正在重构使用Flux架构,并且在努力弄清楚错误处理应该如何工作,同时坚持使用Flux模式。
目前遇到错误时,jQuery事件' AppError'触发并且订阅此事件的通用错误处理帮助程序将Flash消息放在用户的屏幕上,记录到控制台,并通过API调用报告它。有什么好处的是我可以从应用程序的任何部分以任何理由触发错误并以一致的方式处理它。
我似乎无法弄清楚如何在Flux架构中应用类似的范例。以下是我挣扎的两种特殊情景。
我的所有API调用都是由动作创建者创建的,我使用承诺在失败时调度错误事件(IE' LOAD_TODOS_FAILED')。商店会看到这个事件并相应地更新它的状态,但我仍然没有从我之前的迭代(通知等)中获得我的一般错误行为。
可能的解决方案:
我可以创建一个绑定到' LOAD_TODOS_FAILED'的错误存储。动作,但这意味着每当我遇到新类型的错误时,我都需要将该动作显式添加到ErrorStore,而不是自动处理所有错误。
这是我真正感到困惑的一个。我想处理一个动作被分派到商店的情况,因为商店的当前状态没有意义。我可以处理Store中的错误来清理状态,但仍然可能想要触发意外发生的错误。
可能的决议:
从商店发送一个表示错误的新动作。
我相信商店不会发送行动(如果我错了,请告诉我),我仍然遇到与上述API错误相同的问题。
为订阅每个商店的错误处理创建一个ControllerView
我可以在每个商店中定义一个errors属性,然后让View观察每个商店,并且只对errors属性进行操作。当errors属性不为null时,它可以调度新的操作等。缺点是我需要记住每当创建新的时都将每个Store添加到该视图,并且每个商店必须具有行为相同的error属性办法。它也无法解决API调用失败问题。
是否有人建议使用适合Flux架构的通用错误处理程序?
我需要处理大多数动作创作者和商店中的错误。如何为任何类型的一般错误设置一致的错误处理?
答案 0 :(得分:6)
如果要避免在ErrorStore中列出每个错误操作,您可以使用通用的APP_ERROR操作,并具有该操作的属性,以更详细地描述它。然后,您的其他商店只需要检查这些属性,以查看该操作是否与它们相关。没有规则存储中的注册回调需要关注操作的类型,或者只关注类型 - 它通常是确定操作是否相关的最方便和一致的方式。
不要发出新动作来回应某个动作。这会导致调度内的调度错误,并导致级联更新。相反,确定应该提前调度的操作。如果有帮助,您可以在发出操作之前查询商店。
你的第二个解决方案听起来不错,但你提到的危险事情是“当错误属性不为空时,它可以发送新的操作等” - 再次,你不想发出动作来响应其他动作。这是Flux试图避免的痛苦之路。您的新控制器视图只需从商店获取值并通过显示正确的视图进行响应。
答案 1 :(得分:-2)
旧线程,但对于后人阅读,我认为专门针对错误的商店是#1的答案。