我们正在重构一个大型 Backbone 应用程序以使用 Flux 来帮助解决一些紧密耦合和事件/数据流问题。但是,我们还没有弄清楚如何处理需要知道特定 ajax 请求状态的情况
当控制器组件从通量存储请求一些数据,并且该数据尚未加载时,我们触发 ajax 请求来获取数据。我们在发起请求时调度一个动作,在成功或失败时调度另一个动作。
这足以加载正确的数据,并在加载数据后更新存储。但是,在某些情况下,我们需要知道某个 ajax 请求是挂起还是完成 - 有时只是为了在一个或多个视图中显示微调器,或者有时在加载数据之前阻止其他操作。
人们在通量/反应应用程序中使用这种行为的任何模式吗?以下是我考虑过的几种方法:
拥有一个“请求状态”存储,它知道是否存在任何类型的未决、已完成或失败的请求。这适用于简单的情况,例如“是否有未决的锻炼数据请求”,但如果我们想要更细化“是否有未决的锻炼 id 123 请求”,则变得复杂
让所有商店跟踪相关数据请求是否处于待处理状态,并将该状态数据作为商店 api 的一部分返回 - 即 WorkoutStore.getWorkout 将返回类似 { status: 'pending', data: {} } 的内容。这种方法的问题在于,这种状态似乎不应该与域数据混合,因为它确实是一个单独的问题。此外,现在锻炼商店 api 的每个消费者都需要处理这种“状态响应”,而不仅仅是相关的域数据
忽略请求状态 - 数据存在且控制器/视图对其进行操作,或者数据不存在且控制器/视图不对其进行操作。更简单,但可能不足以满足我们的目的