Javascript 无法返回来自承诺的结果

Javascript 无法返回来自承诺的结果,javascript,node.js,asynchronous,es6-promise,Javascript,Node.js,Asynchronous,Es6 Promise,我试图从两个不同的表中读取一些数据,并在呈现ejs文件之前解析CSV文件。 我可以从两个表和CSV文件中获取数据,但似乎无法返回结果 我很确定这是我处理异步执行的方式的一个问题,但我看不出我做错了什么 在过去的两天里,我一直在阅读(包括这里的帖子)和浏览,但不知怎么的,我还是找不到答案 第一个文件-usercms.js app.get('/userscms', function(req, res) { existingUsers.getExistingUsers(

我试图从两个不同的表中读取一些数据,并在呈现ejs文件之前解析CSV文件。 我可以从两个表和CSV文件中获取数据,但似乎无法返回结果

我很确定这是我处理异步执行的方式的一个问题,但我看不出我做错了什么

在过去的两天里,我一直在阅读(包括这里的帖子)和浏览,但不知怎么的,我还是找不到答案

第一个文件-usercms.js

    app.get('/userscms', function(req, res)
    {
        existingUsers.getExistingUsers()
        .then(function(appUsers)
        {
            //global users array
            //I can display these in my ejs file
            globalAppUsers = appUsers;
        })
        .then(existingUsersAttributesQlik.getExistingUsersAttributesQlik())
        .then(function(usersQlikAttributes)
        {
            //global user attributes array
            //undefined data
            globalUsersQlikAttributes = usersQlikAttributes;
        })
        .then(existingSuppliers.parseSuppliersCSV())
        .then(function(supplierData)
        {
            //the result I am expecting
            //this prints undefined
            console.log(supplierData);
        }).then(function()
        {
            res.render('userscms.ejs',
            {
                users: globalAppUsers,
                attributes: globalUsersQlikAttributes
            });
        });
    });
第二个函数-getxistingUsers.js(与getExistingUsersAttributesQlik相同,但查询除外)


你知道我做错了什么吗?我是不是走错了路?

我在这里猜测一下,并假设您创建的承诺应该解决一些问题……而不是返回一个值

               .on("end", function () 
                {
                    console.log("done");
                    //all OK here
                    console.log(suppliersData);
                    //this doesn't seem to return anything
                    return resolve(suppliersData);
                });

您可能希望
resolve
而不是
return
resolve(供应商数据)
。然后(existingUsersAttributesQlik.getExistingUsersAttributesQlik())
将无法工作。必须先将函数传递给
,然后传递给
,而不是承诺。避免使用
globalAppUsers
globalUsersQlikAttributes
之类的东西。请参阅以获得更好的方法。@Bergi-谢谢,这很有帮助。关于全局变量,我不打算就这样离开它们。@Mark-谢谢。更改为解析并返回函数(基于Berg的建议)。谢谢。更改为解析并返回函数(基于Berg的建议)。
    var supplierData = [];
    var suppliersData = [];
    var csvCount = 0;

    (function (exports)
    {
        exports.parseSuppliersCSV = function ()
        {
            return new Promise(function(resolve, reject) 
            {
                var fileStream = fs.createReadStream("myCSV.csv");
                var parser = fastCsv();

                csvCount = 0;
                supplierData = [];
                suppliersData = [];

                fileStream
                    .on("readable", function ()
                    {
                        var data;
                        while ((data = fileStream.read()) !== null) 
                        {
                            parser.write(data);
                        }
                    })
                    .on("end", function () 
                    {
                        parser.end();
                    });

                parser
                    .on("readable", function () 
                    {
                        var data;

                        while ((data = parser.read()) !== null) 
                        {
                            if(csvCount >= 1)
                            {
                                csvCount++;

                                var arrayOfStrings = data[0].split(';');
                                var supplier = new supplierModel.Supplier(arrayOfStrings[0],arrayOfStrings[1]);
                                suppliersData.push(_.toArray(supplier));                           
                            }
                            else
                            {
                                csvCount++;
                            }
                        }                   
                    })
                    .on("end", function () 
                    {
                        console.log("done");
                        //all OK here
                        console.log(suppliersData);
                        //this doesn't seem to return anything
                        return suppliersData;
                    });
            });
        };
    })(typeof exports === 'undefined' ? this['parseSuppliersCSV'] = {} : exports);
               .on("end", function () 
                {
                    console.log("done");
                    //all OK here
                    console.log(suppliersData);
                    //this doesn't seem to return anything
                    return resolve(suppliersData);
                });