【问题标题】:s3.ListObjects() doesn't do anythings3.ListObjects() 不执行任何操作
【发布时间】:2023-01-20 21:44:00
【问题描述】:

我有一个 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() 没有做任何事情。 有人可以指导我解决问题。任何帮助深表感谢。

【问题讨论】:

  • 会不会是 S3 超时了?

标签: node.js amazon-s3 aws-lambda


【解决方案1】:

TL;DR 删除 async 关键字


您将 non-async(= 回调)处理程序模式与 async(= 返回承诺)模式混合在一起。

带有 async 关键字的函数是一个异步处理程序。您的函数的执行在您的回调完成之前结束。删除 async 关键字,Lambda 将等到事件循环为空(直到回调完成)再退出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多