与节点同步执行两个或多个 Lambda 函数.js使用 API 网关



我想通过 API 网关执行一个 Lambda 函数,在这个 Lambda 函数中,我调用了 3 个其他 Lambda 函数和 8 个扫描查询。这些流程的组合将完成我的业务逻辑以执行某些操作并找到我需要使用 SNS 向其发送通知的用户。问题是,当我从第一个 Lambda 函数调用 Lambda 函数时,它不会等到内部 Lambda 函数继续执行代码。因此,我无法根据内部 Lambda 函数获得答案,并且始终从回调响应为成功。

有一些代码示例会有所帮助,但是,我猜您可能没有正确调用 lambda 函数。请参阅调用 AWS。另一个 lambda 函数中的 lambda 函数.

在您的情况下,我认为您可能在 lambda 调用范围之外调用 context.succeed 函数。

我认为你可能正在做什么:

exports.handler = function(event, context, callback) {
  const lambdaParams = ...
  const lambdaResponse = lambda.invoke(lambdaParams)
  context.succeed(...)
};

我认为你应该做什么:

exports.handler = function(event, context, callback) {
  const lambdaParams = ...
  lambda.invoke(lambdaParams, function(err, data) {
    if (err) {
      context.fail(err); // AWS recommends using the callback instead of context
    } else {
      context.succeed('Lambda_B said '+ data.Payload);
    }
  })
};

更新:2018 年 1 月 23 日,基于收到的有关 AWS 推荐方式执行此操作的评论

exports.handler = function(event, context, callback) {
  const lambdaParams = ...
  lambda.invoke(lambdaParams, function(err, data) {
      // if using API gateway, you may want to serialize the data (i 
      // think the error response too), which requires an object
      // containing either/all statusCode, body, header e.g: 
      // {statusCode: 200, header: {}, body: JSON.stringify(data)}
    if (err) {
      callback(err, null)
    } else {
      callback(null, data) 
    }
  })
};

最新更新