2014-12-24 57 views
4

我正在写一个简单的应用程序,使用通量设计原则来更好地理解底层机制。为了提供增强的体验,用户更改会立即记录到本地商店,从而以零延迟更新界面。同时,异步请求被分派给服务器;在发生服务器故障时,本地存储将从服务器重新加载。通量:如何处理多个异步请求

但是,我不确定如何最好地处理这种情况,在这种情况下,由于服务器响应较慢,有多个异步请求处于待处理状态。在这种情况下处理失败似乎要复杂得多。例如,假设有三个挂起的异步请求(每个状态一个用于突变用户交互)。第一个成功,但第二个失败。我应该取消第三个请求吗?我如何从第二个请求回滚更改,但不是第三个。

我想尽可能地避免这种复杂性。流量是否提供了处理这种情况的机制?我意识到我可以在异步请求挂起时锁定用户界面,以防止来自排队的多个请求,但我不愿意介绍这种方法的降级用户体验。

编辑: 有些人相当质疑是否多个异步调用的问题是特定于通量。我没有提到的是,我关心的是guidance,存储/调度程序只执行同步代码。

+0

除了是一个不好的用户experienec,为了防止在同时发生多个异步操作的情况下阻塞UI是一个坏的代码味道。 这是一种耦合形式;您从视图外部(即在Action Creator中)对视图做出假设。 – namuol

回答

0

那么,正在问不同的问题。首先是如何管理国家变化的历史,其次是如何处理失败。

如何管理变化的历史状态

Facebook并没有提供这样的问题的解决。 Flux只是一个架构,而不是一个库或框架。但这是一个多次解决的老问题。基本方法是,该状态只能通过对状态进行操作才能更改,并且可能会取消或撤消每个操作。您可以使用Rx-Flux(但尚未完成),因为此撤消/重做库可能会提供所需的功能。

如何处理失败

不能有这样的通用例如一个通用的解决方案。在某些情况下,您可以简单地吞下失败的操作并忘记操作,在某些情况下,您必须重试操作直至成功,在某些情况下,您必须要求用户执行某些操作才能解决问题。对于一些快节奏的游戏,将会有一种解决方案,对于网上银行我们会有另一种解决方案。

0

听起来这个问题不是关于通量架构,而是关于异步调用的实现。

假设一旦您获得用户交互状态更改,就会触发异步调用的当前实现。当你触发AJAX时,只能在客户端取消它,这意味着你调用abort来关闭响应的监听器。但是现在在服务器端,第三个请求仍将继续。

除非你实现的方式>>每个用户交互状态的改变都会存储一个队列(可能是一个数组)。然后你一个接一个地触发AJAX调用。

会理解/解释更好,如果你能提供任何代码片段:)