[英]How can Redux guarantee no race condition?
我最近了解了Redux。
我很好理解这个概念,但我在官方文档中没有弄清楚这一行:
因为所有的变化都是集中的,并且按照严格的顺序逐个发生,所以没有细微的竞争条件需要注意。
Redux如何保证不会出现微妙的竞争条件?
实际上,我可以想象这种情况(按顺序):
因此,动作创建者调度将按顺序应用,但这些动作创建者的实现可能不会按顺序应用,可能导致非确定性代码。
如何弄清楚报价?
我可以理解,对于Redux,有一种关于调度操作历史的跟踪 (有助于在运行时理解程序工作流),但这些操作的实际实现又如何呢?
Javascript是线程安全的,因此2个函数不能同时运行。
Redux不了解异步操作,它只关心当前状态,调度给它的事件以及如何在给定事件的情况下将当前状态转换到某个其他状态。
因此,确保行动调度顺序是您的责任,这不是Redux的责任。
如果有两个事件,X和Y,并且您希望在处理X之前阻止处理Y,那么您可以使用某些状态属性在Redux状态中跟踪它。 因此,您可以轻松地防止在处理X之前处理Y.
对于异步操作和人们可能希望应用的错误处理有太多不同的要求。 因此很难为你所谈论的“竞争条件”提供一般解决方案。
设计您的系统,查找所有边缘案例,并为您可以拥有的每个边缘案例创建新的事件/事件名称/事件处理。 然后在redux减速器中处理它们,进行适当的状态转换。 在Web应用程序中,没有什么是致命错误(要求用户刷新浏览器不是一个好的UI / UX),因此您必须从每个可能的边缘情况中恢复,因此抛出错误没有多大意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.