Сначала я использую метод 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.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);
});
Как мне это сделать?