首先,我使用s3.listObject()方法获取存储桶中的对象列表。这是一个承诺,我将结果发送到另一个函数,在其中我要遍历结果并收集每个对象上的元数据:
S3.listObjects({
Bucket: bucketName,
MaxKeys: 10,
Marker: marker,
})
.promise()
.then(collectRedirects)
.then(callback); // each object in my list should now all have a new property, the metatag
在collectRedirects函数内部,我需要遍历传递的结果,然后使用另一个异步函数s3.getObject来获取元标记。像这样:
collectRedirects(objects) {
objects.forEach(function(e,i,a){
a[i].foo = S3.getObject({
Key: e.Key,
Bucket: bucketName
})
.promise()
.then(function(result){
Promise.resolve( result.foo );
});
}); //end loop
return objects;
}
但是,在getObject方法解析之前,循环已完成。我下一步是什么?
我试图将getObject方法的结果保存到一个promises数组中,然后运行Promise.all,但这只是给了我一组未定义的值:
var promises = [];
objects.forEach(function(e,i,a){
let p = S3.getObject({...})
.promise().then(function(result){
Promise.resolve( result.foo );
});
promises.push(p);
});
Promise.all(promises)
.then(function(values) {
console.log(values);
});
我应该怎么做?
答案 0 :(得分:0)
您的问题是您没有setFragment(new HomeFragment())
return
中的任何东西。它只是创建一个承诺,然后丢弃它并返回function(result){ Promise.resolve( result.foo ); }
。
您正在寻找undefined
。
一起,你会写
function (result) { return result.foo; }