Запись в корзину S3 с использованием Async / Await в AWS Lambda - PullRequest
2 голосов
/ 06 марта 2019

Я использовал приведенный ниже код (который я сейчас добавил, жду) для отправки файлов на S3. Он хорошо работал с моим лямбда-кодом, но когда я перехожу к передаче больших файлов, таких как MP4, я чувствую, что мне нужно async / await.

Как я могу полностью преобразовать это в async / await?

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

1 Ответ

6 голосов
/ 06 марта 2019

Вы только await функции, которые возвращают обещание.s3.putObject не возвращает обещание (аналогично большинству функций, которые принимают обратный вызов).Возвращает объект Request.Если вы хотите использовать async / await, вам нужно привязать метод .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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...