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