我在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本身存在问题或我的代码是否有问题?
如果有人能解释我,我真的很感激。
提前致谢。
答案 0 :(得分:0)
listObjects中的参数错误。 API调用应该是这样的
var getparams ={Bucket:'photos' , Prefix:restids[i]+'/'}
而不是
var getparams ={Bucket:'photos' , Marker:restids[i]+'/'}