我正在使用AWS开发工具包,并且正在使用Lambda运行此代码。我注意到,当我在异步函数内部使用带有回调的上载函数时,它不执行该函数。
const aws = require('aws-sdk');
exports.handler = async (event) => {
const s3 = new aws.S3();
console.log('START UPLOAD')
const params = {
Bucket: 'practice-bucket',
Key: 'hello.txt',
Body: "hello",
}
s3.upload(params, function(err, data) {
console.log(err, data);
});
};
我知道如何使这项工作。通过将函数更改为非异步函数,或者通过使用await并将upload()的响应转换为promise。但是我仍然很好奇为什么它不执行upload()函数?我期望它只是执行一个常规功能,因为我没有告诉它等待。
如果您的函数在s3.upload完成之前返回,这就是Javascript的事件循环与异步函数一起工作的方式。
您可以通过将s3.upload转换为Promise,然后使用await获取结果并阻止异步处理程序的返回来解决此问题。
await result = s3.upload(params).promise();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句