我有一个 React.js 应用程序,正在重构它以使用 Flux 架构,并且正在努力弄清楚错误处理在坚持 Flux 模式的同时应该如何工作。
目前,当遇到错误时,会触发 jQuery 事件“AppError”,并且订阅此事件的通用错误处理助手会在用户屏幕上放置一条 Flash 消息,记录到控制台,并通过 API 调用进行报告。好处是我可以出于任何原因从应用程序的任何部分触发错误,并以一致的方式处理它。
我似乎无法弄清楚如何在 Flux 架构中应用类似的范例。这是我正在努力解决的两个特定场景。
1)API调用失败
我的所有 API 调用都是由操作创建者进行的,并且我使用承诺在失败时调度错误事件(即“LOAD_TODOS_FAILED”)。商店看到此事件并相应地更新其状态,但我仍然没有上一次迭代(通知等)中的通用错误行为。
可能的解决方案:
我可以创建一个绑定到“LOAD_TODOS_FAILED”操作的 ErrorStore,但这意味着每次出现新类型的错误时,我都需要将该操作显式添加到 ErrorStore,而不是自动处理所有错误。
2) 商店收到意外操作
这是我真正感到困惑的一点。我想处理将操作分派到商店的情况,而鉴于商店的当前状态,该操作没有意义。我可以处理存储中的错误以清理状态,但仍然可能希望触发发生意外情况的错误。
可能的解决方案:
-
从存储中调度指示错误的新操作。
我相信商店不应该调度操作(如果我错了,请告诉我),并且我仍然遇到与上面的 API 错误相同的问题。
-
创建一个订阅每个 Store 的用于错误处理的 ControllerView
我可以在每个商店上定义一个错误属性,然后让一个视图监视每个商店并仅对错误属性进行操作。当错误属性不为空时,它可以调度新的操作等。缺点是,每当创建新的商店时,我需要记住将每个商店添加到此视图,并且每个商店都必须有一个行为相同的错误属性方式。它也没有解决 API 调用失败的问题。
有没有人有适合 Flux 架构的通用错误处理程序的建议方法?
TL;DR
我需要处理大多数 Action Creators 和 Stores 中的错误。如何针对任何类型的一般错误设置一致的错误处理?
- API调用失败
如果您想避免列出 ErrorStore 中的每个错误操作,您可以使用通用 APP_ERROR 操作,并使用该操作的属性来更详细地描述它。然后,您的其他商店只需要检查这些属性,看看该操作是否与它们相关。没有规定商店中注册的回调需要关注操作的类型,或者仅关注类型——这通常是确定操作是否相关的最方便且一致的方法。
- 商店收到意外操作
不要针对某项操作发出新的操作。这会导致调度内调度错误,并会导致级联更新。相反,应提前确定应调度哪些操作。如果有帮助,您可以在发出操作之前查询商店。
你的第二个解决方案听起来不错,但你提到的危险的事情是“当错误属性不为空时,它可能会调度新的操作等”——同样,你不想发出操作来响应其他操作。这就是 Flux 试图避免的痛苦之路。您的新控制器视图将简单地从存储中获取值并通过呈现正确的视图进行响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)