Aws lambda 使用API网关与node.js同步执行两个或多个Lambda函数

Aws lambda 使用API网关与node.js同步执行两个或多个Lambda函数,aws-lambda,aws-api-gateway,Aws Lambda,Aws Api Gateway,我想通过API网关执行一个Lambda函数,在这个Lambda函数中,我调用了另外3个Lambda函数和8个扫描查询。这些流程的组合将完成我的业务逻辑,以执行一些操作,并找到需要使用SNS向其发送通知的用户。问题是,当我从第一个Lambda函数调用Lambda函数时,它不会等到内部Lambda函数继续执行代码。由于这个原因,我无法根据内部Lambda函数得到答案,并且总是以成功的方式从回调中响应。有一些代码示例会有所帮助,但是,我猜您可能没有正确调用Lambda函数。 请参阅 在您的情况下,我认

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

有一些代码示例会有所帮助,但是,我猜您可能没有正确调用Lambda函数。 请参阅

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

我认为你可能在做什么:

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);
    }
  })
};
我认为你应该做的是:

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) 
    }
  })
};

你能发布你的代码样本吗?我可能有一些想法,但我认为一个代码示例可能有助于澄清您正在尝试做什么。为什么不使用AWS建议的内容?这是从参考答案中复制过来的。事实上,我可以使用推荐的方法,但我认为OP的问题更重要的是概念性的,而不是实际的实现。顺便说一句,我也在使用推荐的方法进行更新。这样更好。:-)鉴于这将成为未来读者的参考,我们应该始终使用正确的方法<代码>上下文。成功/context.fail已被弃用。由于向后兼容,它仍然有效。我已经尝试了两种方法,但对我来说都不起作用。。我使用了context.success和context.done