javascript - 在 AWS Lambda 中使用 Async/Await 写入 S3 存储桶

标签 javascript node.js amazon-s3 async-await aws-lambda

我一直在使用下面的代码(我现在已经添加了等待)将文件发送到 S3。它在我的 lambda 代码上运行良好,但当我开始传输更大的文件(如 MP4)时,我觉得我需要异步/等待。

如何将其完全转换为异步/等待?

exports.handler = async (event, context, callback) => {
...
// Copy data to a variable to enable write to S3 Bucket
var result = response.audioContent;
console.log('Result contents ', result);

// Set S3 bucket details and put MP3 file into S3 bucket from tmp
var s3 = new AWS.S3();
await var params = {
Bucket: 'bucketname',
Key: filename + ".txt",
ACL: 'public-read',
Body: result
};

await s3.putObject(params, function (err, result) {
if (err) console.log('TXT file not sent to S3 - FAILED'); // an error occurred
else console.log('TXT file sent to S3 - SUCCESS');    // successful response
context.succeed('TXT file has been sent to S3');
});

最佳答案

您只能await 返回 promise 的函数。 s3.putObject 不返回 promise (类似于大多数接受回调的函数)。它返回一个 Request 对象。如果要使用异步/等待,则需要将 .promise() 方法链接到 s3.putObject 调用的末尾并删除回调(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html#promise-property )

try { // You should always catch your errors when using async/await
  const s3Response = await s3.putObject(params).promise();
  callback(null, s3Response);
} catch (e) {
  console.log(e);
  callback(e);
}

关于javascript - 在 AWS Lambda 中使用 Async/Await 写入 S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55012396/

相关文章:

javascript - 返回数组内对象的值

json - 使用 package.json 文件或不使用 package.json 文件安装 Express 时出错

php - 如何使 PHP 文件与亚马逊托管一起使用?

javascript - Firestore 查询具有多个值的循环

javascript - 如何从AngularJS中的对象中获取键值

javascript - Keydown 和 keyup 事件监听器工作正常

javascript - 如何在浏览器的地址栏中附加 Accordion 的标题 ID 作为 anchor URL?

json - 如何根据 Mongoose 中的子文档值检索父文档?

.net - FxCop 告诉我使用 .Net Uri 类是不是错了?

c# - AWS S3 transferutility Upload 从不上传但显示完整无错