NodeJS s3.ListObjects()不执行任何操作

yk9xbfzb  于 2023-01-25  发布在  Node.js
关注(0)|答案(1)|浏览(122)

我有一个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()没有做任何事情。有人能指导我解决这个问题吗?任何帮助都是非常感谢的。

gxwragnw

gxwragnw1#

TL;DR删除async关键字
您将非异步(= callback)处理程序模式与异步(= return a promise)模式混用。
带有async关键字的函数是异步处理程序。函数的执行在回调完成之前结束。删除async关键字,Lambda将等待事件循环为空(回调完成)后退出。

相关问题