AWS Lambdacallback节点js太快了

我正在尝试复制AWS文档( 链接 )中的缩略图示例。 我想在创build后立即使用这个缩略图。 我希望context.done()callback就足够了。 callback给了我一个很好的回应,但它是太快了。 图像的大小并不总是在s3桶中存储。 在调用lambda函数时,我特别将调用types设置为“Event”,以便在函数完成resize后callback。

考虑到文档中的例子,等待整个lambda函数完成的方法是什么? 现在在我的应用程序中调用lambda函数的函数如下所示:

AWS.config.loadFromPath('./configs/config.json'); var lambda = new AWS.Lambda(); var params = { FunctionName: 'resizeImage', InvocationType: 'Event', Payload: JSON.stringify({key: req.body.key}) }; lambda.invoke(params, function (err, data) { if (err) { console.log(err, err.stack); // an error occurred } else { console.log(data); // successful response next(); } }); 

我find了我的问题的答案。 我把调用函数时可以提供的调用types弄乱了。 有三种调用方式,在我的问题中我使用“事件”types。 这会导致lambda函数给出一个直接的(因此是asynchronous响应),该函数可能还没有完成。 将调用types更改为“RequestResponse”提供了一个同步响应,我们希望等待我们的function完成。

另请参阅AWS文档

您不应该阻止等待Lambda完成。 相反,您应该将您的S3 Events发布到SNS Topic ,然后在您的应用程序中处理这些事件。 这将保证你访问它们时你的对象已经到位。