node.js - s3.ListObjects() 不执行任何操作

标签 node.js amazon-s3 aws-lambda

我有一个 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/

相关文章:

node.js - 在 es6 中用 jest react 单元测试

javascript - Node 脏在运行过程中不会持续存在

node.js - 使用地理位置确定哪些用户与某个用户接近

amazon-web-services - 将数据附加到 S3 对象

apache-spark - Spark 使用 sc.textFile ("s3a://bucket/filePath"读取 s3 )。 java.lang.NoSuchMethodError : com. amazonaws.services.s3.transfer.TransferManager

aws-lambda - AWS Lambda Go : The VM errors out in mounting the folder,/var/task/main 没有这样的文件或目录。如何解决?

node.js - 在同一亚马逊帐户上的存储桶之间移动文件

javascript - 从 DotNetCore 迁移到 NodeJS

python - 如何查找 S3 存储桶内文件夹的大小?

amazon-web-services - 使用带有 lambda 的自定义资源导出 cloudformation 中的输出