如何在超出范围时退还承诺?

我想从AWS S3asynchronous检索多个文件,所以我使用Promises。

我正在使用AWS S3来检索文件。 但是,实现超出了范围。 我收到以下错误;

ReferenceError: reject is not defined 

在这种情况下返回一个Promise的正确方法是什么?如何用S3返回的数据提供一个files的关键字?

 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期待一系列的承诺。 现在你的map函数中的callback没有返回一个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, } });