【发布时间】:2019-02-23 22:39:59
【问题描述】:
首先我使用 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 方法的结果保存到一个 Promise 数组中,然后运行 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);
});
我应该怎么做?
【问题讨论】:
-
不要使用
forEach+push,使用map。
标签: javascript amazon-s3 promise aws-sdk