将从promise返回的数据分配给变量对象

时间:2017-07-14 13:40:57

标签: javascript node.js promise

我有以下代码从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);
    });

1 个答案:

答案 0 :(得分:1)

Promise.all(...).then应该返回已解析的promise返回值的可迭代,因此res处理程序中的then应该是s3.getObject的返回值数组。

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);
    });

如果filesgetFiles次调用之间发生变异,您可以将其作为Promise.all()的第一个参数解析,然后将其作为{{1 }}