4

我试图从另一个 lambda 函数中调用一个异步 lambda函数,我发现如果调用函数退出太快,它就不会被执行。

换句话说,以下内容永远行不通。LambdaFunction2 永远不会被调用。

function lambdaFunction1(event, context) {
  callLambdaFunction2();
  context.done(null);
}

但是到目前为止,在 LambdaFunction1 退出之前添加一个小的延迟确实可以正常工作:

function lambdaFunction1(event, context) {
  callLambdaFunction2();
  setTimeout(
    function() {
     context.done(null);
    }, 500
  );
}

我担心的是等待 500 毫秒是一个相当随意的幻数。有没有人遇到过类似的问题并找到了更有原则的解决方法?

4

1 回答 1

5

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吗?

于 2015-06-16T10:13:58.190 回答