javascript - 超出范围时如何返回 promise ?

标签 javascript node.js promise

我想从 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/

相关文章:

javascript - Node/Express 中的 Ajax 删除请求和响应 - 在调用方法后如何使用 GET 方法重定向?

node.js - 使用 sinon stub 在 mocha 中对 ES6 函数导入进行 stub

jquery - 使用 RESTful Webservice 完成 Monaco 编辑器代码

JavaScript如何在Promise onSuccess之外获取在Promise内部分配的变量值

javascript - Jquery 表排序不适用于图像

javascript - 是否可以对 Chrome 扩展进行 Base64 编码?

Javascript 异步函数调用 : Retrieve calling function paramters in callback function

javascript - jQuery 如何获取最后一个可见元素?

javascript - 基于变量数组顺序执行异步方法

node.js - 通过远程数据库或rabimtMQ发送db数据