如何将值从 listObjects 推送到数组

how to push values from listObjects to an array

我有一个名为 yourArray 的数组。 var yourArray = []; 当我从 s3 使用 listObjects 获取对象名称时,我想将此对象名称推送到数组中。

var params ={
     Bucket: 'exBucket',
     Prefix: 'somePrefix'
};

s3.listObjects(params, function(Err, Data){
    if(!Err){
      for (var i = 0; i < Data.Contents.length; i++){
         console.log('Listed: ', Data.Contents[i].Key);
         yourArray.push(Data.Contents[i].Key);
      }
    };
});

在这里,console.log('Listed: ', Data.Contents[i].Key); 给了我所有的名字。但是 yourArray.push(Data.Contents[i].Key); 不推送名称并且数组仍然是空的。哪里错了?

正如 Jaromanda X 所说,listObjects 是异步的,您的函数试图在对象完成之前将值放入数组中。

为了处理这样的 S3 对象,我建议使用 Bluebird promise

https://www.npmjs.com/package/aws-promised