首页 > 解决方案 > 如何将并行任务中步骤的输出传递给 Catch?

问题描述

我有一个包含几个不同步骤的并行状态,并且我掌握了该并行状态,而不是单个步骤。我注意到当它击中 Catch 时,只有并行任务的输入被传递。直到失败为止的步骤的输出都丢失了。反正有没有把这个传给渔获?我有这样的东西。

try {
step1()
  step2()
  step3()
} catch (States.Timeout) {
  ...
} catch (States.ALL) {
  ...
}

标签: amazon-web-servicesaws-lambdastate-machineaws-step-functions

解决方案


没有办法。并行任务本身就是连接到捕获的东西。因此,如果其中的任何部分失败,则该任务就是失败的原因(并行任务中的所有分支) - 因此,Step Functions/状态机无法知道发生了什么 - 不是真的。

什么会继续你的捕获是导致失败的错误消息。虽然这只会为您提供失败的特定 lambda 的信息,但可以创建一个自定义异常,其中包含您要发送到 Catch 处理程序的信息。当这个异常被抛出(而不是在 lambda 中捕获)时,它会在您的输入 json 的末尾生成以下结构(至少对于抛出自定义异常的 Python Lambda - 格式可能会根据其他语言如何将其异常字符串化):

{
 ...
 your input json
 ...
"error":
    {
    "errorType": "MyCustomException",
    "Cause": "A stringified version of you error"
    }
}

这允许您在错误发生时将您可用的任何信息传递给您的 lambda。

如果您需要更多(例如该过程的其他部分已完成),那么您将需要使用某种数据库 - 要么在您的 catch 块中为您的 lambdas 中的任何未处理的错误数据库同步或其他存储状态机当前状态/状态的方法。


推荐阅读