我试图在回调函数之外获取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);
});
});
});