异步流程图。如何直观地表示异步逻辑

时间:2014-10-09 21:02:13

标签: javascript node.js angularjs promise

是的,这有点像矛盾。

是否有表示异步逻辑的可视语言?像流程图一样简单?

我想对UI“屏幕”以及它们背后的逻辑进行建模。

谢谢!

3 个答案:

答案 0 :(得分:3)

有一种用于表示异步逻辑的“可视语言”:Petri Nets。

[Petri的]网络理论

Petri网是根据网络元素描述的系统。网元有四种类型:位置,转换,输入和输出。输入将位置连接到转换。输出将过渡连接到场所。每个网元可以具有零个或多个注释。每个注释也可以有零个或多个注释。

类型注释

网元的类型有:P(位置),T(转换),I(输入),O(输出)

图标注释

可以用圆圈在视觉上表示场所元素。过渡元素可以用正方形表示。输入元素可以由从圆到正方形的箭头表示。输出元素可以用从正方形到圆形的箭头表示。

标签注释

每个圆圈或正方形可以附有标签标识符,用于唯一标识形状的文本。正方形的标签位于正方形的中心。圆圈的标签位于圆圈之外。

模式和类

从一组现有的注释模式开始可能很方便 - 例如在Place / Transition网络中使用的注释类型,一类Petri网。

  1. 每个地方都有一个标记 - 数量或数字从0开始。
  2. 每个过渡都有一个状态 - 真或假。
  3. 每个输入都有一个状态 - true或false。
  4. 每个输入都有一个重量 - 来自1的数量或数字。
  5. 每个输入都有状态更新规则/逻辑 - 如果输入位置的标记大于或等于输入的权重,则状态为真;否则,状态为false。
  6. 每个输入都有一个权重更新规则/逻辑 - 从输入位置的标记中减去输入权重。
  7. 每个输出都有一个重量 - 从1开始的数量或数字。
  8. 每个输出都有一个权重更新规则/逻辑 - 将输出权重添加到输出位置的标记。
  9. 每个转换都有一个状态更新规则/逻辑 - 如果每个转换的状态为真,则转换的状态为真;否则,状态为false。
  10. 每个转换都有一个标记更新规则/逻辑 - 调用每个输入和每个输出的标记更新规则。
  11. “扩展”

    如果上面给出的注释类型对于应用程序不满意,则可以添加或更改注释。例如,

    1. 更改表示网元的形状。
    2. 修改更新规则/逻辑。
    3. 改变输入权重的范围并更改输入的状态更新规则 - 对于抑制器网络,另一类Petri网,输入权重可以是0的数字;状态更新规则有一个附加组件,如果输入权重为零,如果输入位置的标记为零,则状态为true,否则状态为false。
    4. 为值大于1或值为0的每个输入权重添加标签注释。

答案 1 :(得分:2)

如果您希望" 模拟您的(异步)逻辑",以便您可以从中获得语义上合理的结论,那么您需要petri nets。来自维基百科:

  

Petri网是用于描述分布式的建模语言   系统,带有过渡和位置图   与行业标准一样,如UML活动图,BPMN和EPC,   Petri网为逐步过程提供图形表示法   包括选择,迭代和并发执行。与这些不同   标准,Petri网有一个精确的数学定义   执行语义,具有完善的数学理论   过程分析。

承诺应该很容易在petri网中代表3个地方,每个地方都表示承诺的one of the states

如果您只是在寻找系统的简单直观表示,那么您可能正在寻找data flow diagram。或者你只是扩展你的流程图,使用并发原语,例如" spawn async process"和"等待结果"。如果您正在寻找正确推荐的可视语言",请查看OMG的UML工具,例如: state machine diagram

答案 2 :(得分:0)

我已将此库用于项目,以可视化数据库对象的状态:https://www.npmjs.com/package/promise-state-machine-es6

虽然它并不真正涵盖异步内容,但它确实有助于推断与非技术人员的应用程序逻辑。