S3 listObjects API返回错误的数据

时间:2015-03-26 14:22:33

标签: javascript node.js amazon-s3 callback aws-sdk

我在S3中有以下文件夹结构。

  

照片/ ID1 /画廊/ PIC1
  照片/ ID2 /画廊/ PIC2
  照片/ ID3 /菜单/ PIC3

我已经编写了以下代码段来列出每个id

中的图片
var restids=['id1','id2','id3'];
for(var i=0;i<restids.length;i++)
    {
        (function(i){
            setTimeout(function(){
                var getparams ={Bucket:'photos' , Marker:restids[i]+'/'};
                (function(par){
                    setTimeout(function(){
                          s3.listObjects(par,function(err,data){
                          if(err){
                            console.log('err fetching images from s3 '+err);
                          }
                          else{
                            console.log(_.pluck(data.Contents,'Key'));
                          }
                        });
                    });
                })(getparams);
            });
        })(i);
    }

上述代码段的预期结果是

  

[ 'ID1 /画廊/ PIC1']
     [ 'ID2 /画廊/ PIC2']
  [ 'ID3 /菜单/ PIC3']

但实际结果是

  

[ 'ID1 /画廊/ PIC1']
  [ 'ID1 /画廊/ PIC1', 'ID2 /画廊/ PIC2']
  [ 'ID1 /画廊/ PIC1', 'ID2 /画廊/ PIC2', 'ID3 /菜单/ PIC3']

每个返回值都包含先前调用的值。 我无法理解这种奇怪的行为 是由于回调还是API本身存在问题或我的代码是否有问题?
如果有人能解释我,我真的很感激。 提前致谢。

1 个答案:

答案 0 :(得分:0)

listObjects中的参数错误。 API调用应该是这样的 var getparams ={Bucket:'photos' , Prefix:restids[i]+'/'}
而不是 var getparams ={Bucket:'photos' , Marker:restids[i]+'/'}