超出范围时如何返回承诺?

时间:2017-07-13 11:04:46

标签: javascript node.js promise

我想从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);

1 个答案:

答案 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,
    }
});