在回调之外返回find()查询的值

时间:2018-06-19 05:35:53

标签: javascript node.js mongodb express

我试图在回调函数之外获取find()函数的值,但每当我尝试查询它时,该变量都是未定义的。

var _ = require('lodash');

app.get('/',function(req,res){
    var start = parseInt(req.query.start);
    var end = parseInt(req.query.end);
    var dept = parseInt(req.query.dept);
    var resultArray = [];
    database.collection("emp").find({"eid" : {$gte : start, $lte : end},"depid" : dept}).toArray(function(err,result){
     resultArray = result;
    });
    console.log(resultArray);
    var deptArray = [];
    _(resultArray).forEach(function(element){
        var a = database.collection("dept").findOne({"depid" : element.depid});
        deptArray.push(a);
    });     
    res.send(deptArray);

以下陈述给我未定义:

console.log(resultArray);

我已经尝试在stackoverflow上实现不同的答案,但无济于事,我仍然没有在范围之外定义。我也读过一些关于Promises的内容,但我无法实现它们,因为我现在对javascript和节点都很新。任何帮助都将受到高度赞赏。

编辑:

我涉足并得到了一个有效的解决方案,但我不知道这是否是最好的方法。我对数据库查询的要求有所改变,所以请不要介意对查询进行任何更改。

app.get('/emprecords',function(req,res){
    var start = parseInt(req.query.start);
    var end = parseInt(req.query.end);
    async.parallel([
        function (callback){
            database.collection('dept').find({ "active": "Y"}).toArray(function (err, results) {
                return callback(err, results);
            });
        },
        function(callback){
            var deptArray = []
            database.collection("dept").find({"active" : "Y"}).toArray(function(err,results){
                _(results).forEach(function(element){
                    deptArray.push(element.depid);
                });
                return callback(err,deptArray);
            });
        }
    ], function (err, results) {
        if (err) {
            // @todo: handle the error
        }
        var finalArray = [];
        database.collection("emp").find({ "eid": { $gte: start, $lte: end },"depid" : { $in : results[1]}}).toArray()
        .then(function(result){
            _(result).forEach(function(element){
               finalArray.push({
                   "ename" : element["ename"],
                   "desc" : _.find(results[0],{depid : element.depid}).desc,
                   "salary" : element.salary,
                   "salary5%" : element.salary*1.05

               })

            });
            res.send(finalArray);

        });


    });
});  

0 个答案:

没有答案