我有一个 lambda 函数(运行时 Node.js 16.x),我需要在其中使用 Node.js 列出 S3 存储桶中的对象。 但是由于某种原因,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
就好像 listObjects() 从未被调用过。这是压缩 s3 对象并上传到存储桶的函数的一部分。如果我对对象键进行硬编码,我就可以毫无问题地获取对象、创建 zip 并上传 zip 文件。但是,如果我需要通过 s3.ListObject() 获取对象键,我将面临上述问题,其中 listObjects() 不执行任何操作。 有人可以指导我解决问题吗?非常感谢任何帮助。
最佳答案
TL;DR 删除 async
关键字
您正在混合 non-async (= 回调)处理程序模式,带有 async (= 返回一个 promise ) 模式。
带有async
关键字的函数是一个异步处理程序。您的函数的执行在回调完成之前结束。删除 async
关键字,Lambda 将等到事件循环为空(直到回调完成)然后退出。
关于node.js - s3.ListObjects() 不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75183952/