将从承诺返回的数据分配给变量对象
问题描述:
我有以下代码从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);
});
答
Promise.all(...).then
应在then
处理器从s3.getObject
返回解决承诺返回值的迭代,所以res
应该是返回值的数组。
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()
的第一个参数然后访问它作为res[0]
+0
在getFiles函数中,我想将getObject中的数据添加到一个files.data键。我正在努力做到这一点。你能帮我吗? –
将'then'中的'console.log(res)'改为'files = res' – lilezek