上云无忧 > 文档中心 > 百度智能云函数计算 CFC 工作流循环(foreach)节点
函数计算CFC
百度智能云函数计算 CFC 工作流循环(foreach)节点

文档简介:
foreach 节点用于遍历数据集,给数据集中的每个元素都执行一次定义好的子流程,类似编程语言中的 for 循环。数据集是一个 JSON 数组对象。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

概述

foreach 节点用于遍历数据集,给数据集中的每个元素都执行一次定义好的子流程,类似编程语言中的 for 循环。数据集是一个 JSON 数组对象。

foreach 与其它节点一样,开始执行时仍会先根据 stateDataFilter 过滤输入数据,接下来会根据 inputCollection 参数,从过滤后的输入数据中取出或生成一个数据集。接下来就是从数据集中依次取出元素,结合 iterationParam 参数传给子流程并执行,元素间的执行是并行的。

在所有元素都执行结束后,foreach 把执行结果汇总到一个数组,根据 outputCollection 参数节点数据内并输出。若某个元素的执行失败了,则整个 foreach 节点也会失败。

处理流程可用如下伪码表示:

# stateInput: 节点输入数据 # stateOutput: 节点输入数据 stateInput = stateDataFilter(stateInput) # 
过滤输入 dataSetInput = inputCollection(stateInput) # 生成数据集 dataSetOutput = [] for item in 
dataSetInput: iteratorInput = {"value of iterationParam": item} # 生成传给子流程的数据 iteratorOutput
 = iterator(iteratorInput) # 用子流程执行每个元素(并行) dataSetOutput.append(iteratorOutput) # 汇总执行结果 
if outputCollection is not None: # 如果定义了 outputCollection 参数,则把执行结果添加到节点输出数据
 stateOutput["value of outputCollection"] = dataSetOutput
   
stateOutput = stateDataFilter(stateOutput) # 过滤输入

参数

以下为 parallel 节点所包含的参数字段:

字段 类型 描述
type(必需) string 节点类型,值为 "parallel"
name(必需) string 节点名称
iterator(必需) object 子流程定义
inputCollection(必需) string jq 表达式,用来指定或生成数据集
iterationParam(必需) string 引用数据集中每个元素的变量名
outputCollection(可选) string jq 表达式,用于指定把遍历数据集的返回结果写入节点数据内的某个字段,若不设置则表示忽略返回结果
max(可选) integer 并行执行元素的最大并发数,默认为100
next(二选一) string 当前节点运行结束后,下一个要运行的节点
end(二选一) bool 设定 end 参数为 true,表示该节点运行结束后,没有继续要运行的节点。只可以定义 next 或 end中的一个
description(可选) string 节点描述信息
stateDataFilter(可选) object 节点输入输出过滤,参考输入与输出
retry(可选) object 错误重试定义,参考错误重试
catch(可选) object 错误捕获定义,参考错误捕获

iterator 的定义与 parallel 节点中的 branch 类似,如下所示:

字段 类型 描述
start(必需) string 分支的开始节点
states(必需) array of state 该分支的节点数组

示例

示例工作流定义如下,该 foreach 节点的逻辑是,从节点输入数据的 orders 数组中筛选出符合 ".completed == true" 条件的 order,每个 order 传给 iterator 中的函数去执行,最后把数据结果写入节点输出数据的 "confirmationresults" 字段。

name: demo start: processOrder states: - name: processOrder type: foreach inputCollection: 
"[.orders[] | select(.completed == true)]" iterationParam: completedorder outputCollection: 
".confirmationresults" iterator: start: sendConfirmation states: - type: operation name:
 sendConfirmation resource: "brn:bce:cfc:bj:123456:function:test:$LATEST" end: true

假定工作流的输入是:

{ "orders": [ { "orderNumber": "1234", "completed": true, "email": "firstBuyer@buyer.com" }, 
{ "orderNumber": "5678", "completed": true, "email": "secondBuyer@buyer.com" },
 { "orderNumber": "9910", "completed": false, "email": "thirdBuyer@buyer.com" } ] } 

节点开始执行后,通过 inputCollection 的 jq 表达式,筛选出 completed 为 true 的元素,得到数据集:

[ { "orderNumber": "1234", "completed": true, "email": "firstBuyer@buyer.com" },
 { "orderNumber": "5678", "completed": true, "email": "secondBuyer@buyer.com" } ]

接下来对数据集中的每个元素,根据 iterationParam 参数,在本例中其值为 "completedorder",构造出传给子流程的数据。

构造出的第一个数据如下所示,然后调用子流程,假如子流程返回结果 {"1234": "ok"}。

{ "completedorder": { "orderNumber": "1234", "completed": true, "email": "firstBuyer@buyer.com" } }

构造出的第二个数据如下,然后调用子流程,假如子流程返回结果 {"5678": "ok"}。

{ "completedorder": { "orderNumber": "5678", "completed": true, "email": "secondBuyer@buyer.com" } }

两次子流程结束后,汇总后得到的结果集为 [{"1234": "ok"}, {"5678": "ok"}]。

本例中定义了 outputCollection: ".confirmationresults",说明需要把结果集放到节点输出数据里的 "confirmationresults" 字段里,该字段不存在时会被自动创建,最终节点输出数据为:

{ "orders": [ { "orderNumber": "1234", "completed": true, "email": "firstBuyer@buyer.com" }, 
{ "orderNumber": "5678", "completed": true, "email": "secondBuyer@buyer.com" },
 { "orderNumber": "9910", "completed": false, "email": "thirdBuyer@buyer.com" } ],
 "confirmationresults": [{"1234": "ok"}, {"5678": "ok"}] }

注:为什么需要设置 iterationParam:数据集中的元素可能是一个普通的字符串、数字等非 JSON 对象,为了保证传给子流程的数据为 JSON 对象,所以通过 iterationParam 参数进行构造。

相似文档
  • 工作流在执行过程中,可能会因为各种原因出错导致执行失败。目前,operation、foreach、parallel 三类节点支持定义错误重试与错误捕获。
  • DuerOS 技能开放平台,英文全称 DuerOS Bots Platform,是 DuerOS 为第三方开发者提供的一整套技能开发、测试、部署工具的开放平台。第三方开发者可以在平台上,通过可视化界面,简单、高效地开发各类个性化技能。
  • 关系型数据库RDS,英文全称Relational Database Service是一个专业化的高性能、高可靠云数据库服务,支持Mysql、SQL Server、PostgreSQL引擎,提供简易方便的Web界面管理、可靠的数据备份和恢复、完备的安全管理、完善的监控等功能。 在本教程中,您将执行以下操作:
  • 当前,百度智能小程序已经全面具备了云开发能力,为开发者提供了一种 Serverless 的小程序开发模式,主要包含了云函数,云存储,云数据库三大部分功能, 其中云函数的功能即由CFC提供了背后支持, 本篇文档将向您介绍一下关于云函数的使用建议。
  • CFC函数计算定时读取物联网智能家电设备上报到IoT平台的最新数据,调用天气API获取指定位置的天气信息、空气质量、紫外线等指数,智能控制远程设备,如根据温度指数,自动开启空调;根据PM2.5指数,自动开启、调节空气净化器。IoT平台结合函数计算,能快速有效地控制远程物联网设备,大大降低开发成本。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部