我有以下代码从AWS S3检索对象。
如何将承诺返回的数据分配给files
个对象?
我希望能够将files
变量传递给下一个.then
中的另一个方法,因为我想访问数据。
var getFiles = function getFiles(files) {
return Promise.all(files.map(function (file) {
return new Promise((resolve, reject) => {
var params = {
Bucket: 'my-bucket',
Key: file.key
};
s3.getObject(params, function (err, data) {
if (err) reject(err);
else {
resolve(data);
}
});
});
}));
};
var fileNames = ['test.jpg', 'background.jpg'];
var files = fileNames.map(function(fileName) {
return {
key: fileName
}
});
getFiles(files)
.then(function(res) {
console.log(res)
})
.catch(function(res) {
console.log(res);
});
答案 0 :(得分:1)
Promise.all(...).then
应该返回已解析的promise返回值的可迭代,因此res
处理程序中的then
应该是s3.getObject
的返回值数组。
files
是全球性的,因此您应该能够直接从then
回调中引用它:
getFiles(files)
.then(function(res) {
console.log(res);
console.log(files); // [{key: 'test.jpg'}, {key: 'background.jpg']
})
.catch(function(res) {
console.log(res);
});
如果files
在getFiles
次调用之间发生变异,您可以将其作为Promise.all()
的第一个参数解析,然后将其作为{{1 }}