问题描述
我正在通过Node应用程序中的Express路线触发步进功能。此步骤功能与以太坊区块链交互,因此高度异步。如果一次尝试多次,交易也可能失败。
正因为如此,我想将这一步函数的执行排队,但是奇怪的是,似乎没有一种直接的方法。
做到这一点的最佳方法是什么?
解决方法
您可以在步功能中使用地图。
Step功能提供内置方式,可针对给定数量的项目并行执行或一次执行。下面是一个示例:
"Validate-All": {
"Type": "Map","InputPath": "$.detail","ItemsPath": "$.shipped","MaxConcurrency": 0,"Iterator": {
"StartAt": "Validate","States": {
"Validate": {
"Type": "Task","Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val","End": true
}
}
},"ResultPath": "$.detail.shipped","End": true
}
您需要更改 MaxConcurrency = 1 的值,以便仅执行一次,并且将一直进行直到直到 InputPath 中的项目用完为止。 InputPath 应该是list
,您可以在 InputPath 中将项目排队,然后启动状态机。
您可以阅读更多here。