我想从 AWS S3 异步检索多个文件,所以我使用了 Promises。
我正在使用 AWS S3 检索文件。但是,fulfill 超出范围。我收到以下错误;
ReferenceError: reject is not defined
在这种情况下返回 Promise 的正确方法是什么?如何最好地为 files
提供从 S3 返回的数据的 key ?
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);
最佳答案
Promise.all
需要一系列 promise 。现在你在 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,
}
});
关于javascript - 超出范围时如何返回 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45078779/