16

我有一个 React.js 应用程序,我正在重构它以使用 Flux 架构,并且正在努力弄清楚在坚持 Flux 模式的同时错误处理应该如何工作。

当前,当遇到错误时,会触发 jQuery 事件“AppError”,并且订阅此事件的通用错误处理帮助器会在用户屏幕上放置一条 Flash 消息,登录到控制台,并通过 API 调用报告它。好的是我可以从应用程序的任何部分以任何原因触发错误,并以一致的方式处理它。

我似乎无法弄清楚如何在 Flux 架构中应用类似的范例。这是我正在努力解决的两个特殊情况。

1) API 调用失败

我所有的 API 调用都是由动作创建者发出的,并且我使用承诺在失败时调度错误事件(IE 'LOAD_TODOS_FAILED')。商店看到这个事件并相应地更新它的状态,但我仍然没有我之前迭代的一般错误行为(通知等)。

可能的解决方案:

我可以创建一个绑定到 'LOAD_TODOS_FAILED' 操作的 ErrorStore,但这意味着每次我遇到新类型的错误时,我都需要将该操作显式添加到 ErrorStore,而不是自动处理所有错误。

2) Store 收到意外动作

这是我真正感到困惑的一个。我想处理当一个动作被分派到一个 Store 的情况下,这在 Store 的当前状态下没有意义。我可以处理 Store 中的错误以清理状态,但仍然可能想触发一个意外发生的错误。

可能的解决方案:

  1. 从商店发送一个指示错误的新操作。

    我相信商店不应该调度操作(如果我错了,请告诉我),我仍然遇到与上述 API 错误相同的问题。

  2. 为订阅每个 Store 的错误处理创建一个 ControllerView

    我可以在每个 store 上定义一个 errors 属性,然后让一个 View 监视每个 Store 并且只对 errors 属性进行操作。当 errors 属性不为 null 时,它可以调度新的操作等。缺点是我需要记住,每当创建新的 Store 时,我都需要将每个 Store 添加到此视图中,并且每个 Store 都必须有一个行为相同的错误属性方法。它也没有解决 API 调用失败的问题。

有没有人有适合 Flux 架构的通用错误处理程序的建议方法?

TL;博士

我需要处理大多数 Action Creators 和 Stores 中的错误。如何设置任何类型的通用错误都会发生的一致错误处理?

4

1 回答 1

7
  1. API 调用失败

如果您想避免在 ErrorStore 中列出每个错误操作,您可以有一个通用的 APP_ERROR 操作,并拥有该操作的属性来更详细地描述它。然后,您的其他商店只需检查这些属性以查看操作是否与它们相关。没有规定商店中注册的回调需要关注操作的类型,或者只关注类型——这通常是确定操作是否相关的最方便和一致的方法。

  1. 商店收到意外操作

不要发出新的操作来响应操作。这会导致 dispatch-within-a-dispatch 错误,并会导致级联更新。相反,应提前确定应分派的操作。如果有帮助,您可以在发出操作之前查询商店。

您的第二个解决方案听起来不错,但您提到的危险是“当错误属性不为空时,它可能会调度新的操作等”——同样,您不想发出响应其他操作的操作。这就是 Flux 试图避免的痛苦之路。您的新控制器视图将简单地从存储中获取值并通过呈现正确的视图来响应。

于 2015-01-15T17:35:44.543 回答