xstate 中的参与者和调用服务有啥区别?

Posted

技术标签:

【中文标题】xstate 中的参与者和调用服务有啥区别?【英文标题】:What is the difference between an actor and invoking services in xstate?xstate 中的参与者和调用服务有什么区别? 【发布时间】:2021-06-10 13:15:05 【问题描述】:

我对 xstate 中演员和调用服务之间的区别有点困惑,因为它们在我看来是一样的。

【问题讨论】:

【参考方案1】:

调用的服务是派生的演员都是演员。创建它们的方式不同。我将互换使用术语“演员”和“服务”,但要区分“调用的演员/服务”和“生成的演员/服务”。

当机器进入具有invoke 属性的状态时,它会创建服务。您必须事先决定要调用多少服务以及要调用哪些服务。当您退出调用服务的状态时,您将无法再与它们通信,并且在某些情况下(调用机器,返回清理函数的回调)服务将停止并清理。对此服务的引用保存在内部。这是发送请求或添加一些您可能想要退出的计算的好方法,或者等到演员完成它的事情。

使用spawn 操作,您可以随时创建任意数量的演员。您创建的演员并没有一成不变,但您必须在上下文中存储对他们的引用。您还可以随时停止任何生成的演员。例如,您可以在一种状态下生成actor,并在有条件的动作时将其停止在另一种状态下。当您希望拥有一个可以随时根据需要生成或停止 Actor 并且不想被绑定到特定状态的系统时,它会很有用。

除此之外 - 它们是相同的。

【讨论】:

【参考方案2】:

最简单的解释是services 被绑定到它们所处的状态。它们在机器进入/存在该状态时启动和停止。

Actor 不受特定状态的约束,它们可以在机器进入特定状态时启动和停止,但它们存在于上下文中,并且它们可以被机器中的每个状态访问.

示例:子机即服务(当机器进入pending状态时启动,当机器存在该状态时自动停止。

const parentMachine = Machine(
  id: 'parent',
  initial: 'pending',
  states: 
    pending: 
      invoke: 
        src: childMAchine
      
    
  
);

示例:子机器作为参与者,在机器进入waiting 状态时启动,作为localOne 属性存在于上下文中。

const parentMachine = Machine(
  id: 'parent',
  initial: 'waiting',
  context: 
    localOne: null
  ,
  states: 
    waiting: 
      entry: assign(
        localOne: () => spawn(childMachine)
      )
    
  
);

【讨论】:

以上是关于xstate 中的参与者和调用服务有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

断路器和隔板模式有啥区别?

微服务间的调用和应用内调用的有啥区别

redux 和状态机(例如 xstate)之间的实际区别是啥?

VHDL中的elseif和elsif有啥区别

“nvprof”的结果中的“GPU 活动”和“API 调用”有啥区别?

在软件工程中“用例”和“用例图”有啥区别是啥?