我试图从另一个 lambda 函数中调用一个异步 lambda 函数,我发现如果调用函数退出太快,它就不会被执行。
换句话说,以下内容永远行不通。 LambdaFunction2 永远不会被调用。
function lambdaFunction1(event, context) {
callLambdaFunction2();
context.done(null);
}
但是到目前为止,在 LambdaFunction1 退出之前添加一个小的延迟确实有效:
function lambdaFunction1(event, context) {
callLambdaFunction2();
setTimeout(
function() {
context.done(null);
}, 500
);
}
我担心的是,等待 500 毫秒是一个相当随意的魔数(Magic Number)。有没有人遇到过类似的问题并找到了更原则性的解决方法?
最佳答案
callLambdaFunction2()
之前可能没有完成context.done(null)
导致处理程序退出。
要解决此问题,您需要调用 context.done
作为回调。例如:
lambda.invoke({
FunctionName: "functionName",
InvocationType: 'Event',
Payload: JSON.stringify(event)
}, function(err, data) {
if (err) return context.done(err, null);
return context.done(null, data);
});
如果这不是解决方案,您能否展示一下您是如何实现的
callLambdaFunction2
?
关于aws-lambda - 如果调用方过早返回,则不执行异步 AWS Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857201/