我在这个项目中工作,我们在其中创建一个AWS Lambda无服务器架构,并且那些异步功能作为“步骤功能”运行。有人告诉我编写错误处理程序部分的代码。基本上,我们有一个cloudformation模板,您可以清楚地看到错误处理程序基本上负责记录这些错误。所以这就是我的问题,如果其他人已经开发了其他部分的开发人员在他们的异步lambda函数中出现任何问题,都将抛出Error,而在cloudformation模板中,我们得到的定义为
{
"Variable": "$.status",
"StringEquals": "FAILED",
"Next": "Handle Error"
}
这些功能。现在,在我的ErrorHandler Lambda函数中,我必须获取这些错误并检查其类型和代码等。我不明白的是这些错误如何传递给我的ErrorHandler?另外,我如何知道哪个函数引发了该错误以了解哪个步骤失败了?我搜索过github,aws doc,但他们根本不谈论代码。 谢谢。
答案 0 :(得分:1)
从您的问题来看,您似乎具有“一个错误处理程序可以全部统治”错误处理类型。我认为您无法通过这种结构实现所需的功能。
我又如何知道哪个函数抛出了该错误以了解哪个步骤失败了?
完全正确。单个错误处理程序并不是那么简单。
您可以做的是为每个可能失败的任务(即您关心失败的地方)配置Catch
。因此,您将隐式知道哪个任务失败。
这就是我的问题,如果异步lambda函数出现任何问题,其他已经开发了其他部分的开发人员就会抛出错误
这是另一个问题。如果任务只是不加选择地抛出Error
,则必须建立变通办法来弥补这一点。
一个更好的选择是针对特定故障实施特定错误,然后将其引发而不是Error
。像这样:
function MySpecificError(message) {
this.name = 'MySpecificError';
this.message = message;
}
MySpecificError.prototype = new Error();
然后,一个人可以返回此错误:
callback(new MySpecificError("Something specific happened."));
现在,在状态机中,您将能够识别故障原因并采取相应措施:
"Catch":[
{
"ErrorEquals":[
"MySpecificError"
],
"Next": "HandleSpecificError"
}
]