我想从AWS S3异步检索多个文件,因此我使用的是Promises。
我正在使用AWS S3来检索文件。但是,履行超出了范围。我收到以下错误;
ReferenceError: reject is not defined
在这种情况下返回Promise的正确方法是什么?如何最好为files
提供从S3返回的数据的密钥?
var getFiles = function getFiles(files) {
return Promise.all(files.map(function(file) {
var params = {
Bucket: 'my-bucket',
Key: file.key
}
s3.getObject(params, function(err, data) {
if (err) reject(err);
else {
// set key.data = data
fulfill(data);
}
});
}));
}
var fileNames = ['file1.jpg', 'file2.jpg'];
var files = fileNames.map(function(fileName) {
return {
key: fileName,
}
});
getFiles(files);
答案 0 :(得分:3)
Promise.all
期待一系列承诺。现在你在map函数中的回调没有返回一个promise。您可以通过将代码更新为以下内容来解决此问题:
var getFiles = function getFiles(files) {
return Promise.all(files.map(function (file) {
return new Promise((resolve, reject) => {
var params = {
Bucket: 'app-design.aiir.net',
Key: file.key
};
s3.getObject(params, function (err, data) {
if (err) reject(err);
else {
// set key.data = data
resolve(data);
}
});
});
}));
};
var fileNames = ['file1.jpg', 'file2.jpg'];
var files = fileNames.map(function (fileName) {
return {
key: fileName,
}
});