我有一个lambda函数(runtime Node.js 16.x),需要使用Node.js列出S3 bucket中的对象。但是由于某种原因,s3.listObjects()没有做任何事情。我似乎找不到原因。代码如下:
const AWS = require('aws-sdk');
const https = require('https');
exports.handler = async (event, context, callback) => {
const awsOptions = {
region: "region"
};
const s3 = new AWS.S3(awsOptions);
const params = {
Bucket: 'bucketName',
Delimiter: '/',
Prefix: 'myPrefix/'
};
console.log("Before listing")
s3.listObjects(params, function(err, data) {
console.log("Listing objects")
if (err) console.log(err, err.stack); // an error occurred
else console.log(data);
});
console.log("After listing")
}
当用上面的代码测试lambda时,它只会打印
Before listing
After listing
就好像列表对象()从未被调用。这是压缩s3对象并上传到bucket的函数的一部分。如果我硬编码对象键,我可以得到对象,创建zip并上传zip文件没有问题。但如果我需要通过s3.ListObject获取对象键()我遇到了上面的问题,listObjects()没有做任何事情。有人能指导我解决这个问题吗?任何帮助都是非常感谢的。
1条答案
按热度按时间gxwragnw1#
TL;DR删除
async
关键字您将非异步(= callback)处理程序模式与异步(= return a promise)模式混用。
带有
async
关键字的函数是异步处理程序。函数的执行在回调完成之前结束。删除async
关键字,Lambda将等待事件循环为空(回调完成)后退出。