全部产品
云市场

并行循环步骤

更新时间:2019-07-08 12:13:32

介绍

并行循环(Foreach)步骤遍历输入中的某个数组类型参数,对于数组中的每个元素并行执行其串行步骤。并行循环步骤类似于编程语言中的 foreach ,不同之处是这里的迭代是并行执行的。

并行循环步骤的每次迭代执行都对应一个本地变量。执行并行循环步骤会对输入参数里的每个元素并发执行串行步骤。这些串行步骤会改变其迭代对应的本地变量。当所有分支执行结束后,可以通过输出映射将迭代本地变量数组转换为并行步骤的输出。

并行步骤包含以下属性:

  • type(必需):foreach,表示该步骤是并行循环步骤。
  • name(必需):步骤名称。
  • iterationMapping(必需): 迭代映射。
    • collection(必需):定义输入中的哪个参数作为循环的集合。
    • item(必需):定义当前元素以什么名称并入迭代输入。
    • index(可选):定义当前位置以什么名称并入迭代输入。
  • steps(必需):定义串行步骤。
  • end(可选):当前步骤结束后是否继续执行其后定义的步骤。
  • inputMappings(可选):输入映射。
  • outputMappings(可选):输出映射。本步骤的 $local 是数组类型,其中的每个元素是一个 JSON 对象,记录了每次迭代的结果。注意:如果未指定输出映射,本步骤默认输出为空

说明: 公测期间并行循环步骤最大并发数限制为100

示例

下面的示例流程定义了一个并行循环步骤,这个并行步骤包含一个任务步骤。

  1. version: v1beta1
  2. type: flow
  3. steps:
  4. - type: foreach
  5. name: myforeach
  6. iterationMapping:
  7. collection: $.names
  8. item: name
  9. steps:
  10. - type: task
  11. name: toUpperCase
  12. resourceArn: acs:fc:{region}:{account}:services/fnf_test/functions/toUpperCase
  13. outputMappings:
  14. - target: names
  15. source: $local[*].name
  • 流程的输入如下。由于 myforeach 步骤没有指定输入映射,其输入和流程输入一样。
  1. {
  2. "names": ["a", "b", "c"]
  3. }
  • toUpperCase 没有定义输入映射,其输入继承父步骤输入,系统根据迭代映射 (iterationMapping)在每次执行迭代时,将当期元素(依次是 abc)为值,以 name 为 key 并入输入。
  1. {
  2. "name": "a"
  3. "names":["a","b","c"]
  4. }
  5. {
  6. "name": "b"
  7. "names":["a","b","c"]
  8. }
  9. {
  10. "name": "c"
  11. "names":["a","b","c"]
  12. }
  • toUpperCase 被执行了3次,输出依次如下。
  1. {
  2. "name": "A"
  3. }
  4. {
  5. "name": "B"
  6. }
  7. {
  8. "name": "C"
  9. }
  • myforeach 的本地变量是一个数组类型,值如下。
  1. [
  2. {
  3. "name": "A"
  4. },
  5. {
  6. "name": "B"
  7. },
  8. {
  9. "name": "C"
  10. }
  11. ]
  • myforeach 的输出如下。由于流程没有定义输出和结果映射,这个输出也是最后流程执行的输出。
  1. {
  2. "names": ["A", "B", "C"]
  3. }