在节点JS中,我只想编写一些外部方法,从mongodb中检索数据并返回它。我已经使用MongoClient.js
模块与mongodb
进行交互。但问题是在调用外部方法时,它会在数据库连接方法完成执行之前返回值。在这里,我只想保留我的return语句,直到mongodb.connect
方法完成。该怎么办?
我的代码如下,
service.js
var employee = require('./model/employeeService.js');
var json = employee.getUser(employeeId);
其中employeeService充当与数据库交互并将数据返回到service.js的模型,其中我们的Web服务已写入并响应用户。
employeeService.js
exports.getUser = function(employeeId) {
var json = [];
MongoClient.connect(db.getdbUrl(),function(err,db){
if(err) {
json = err;
}else {
document = (employeeId)?{_id:employeeId}:{};
db.collection('Employee').find(document).limit(50).toArray(function(err,users){
if(err) {
json = err;
}
else {
console.log("Inside MongoClient"); // this will executes second
json = users;
}
});
}
});
console.log("OutSide",json); // this executes first
return json;
}
在这里,我可以从输出控制台找到连接MongoClient.connect方法的异步执行流程,并通过从service.js调用它来获取空数组。
输出控制台
OutSide []
Inside MongoClient
答案 0 :(得分:0)
这是not
异常流,这是asynchronous
代码执行的方式。如果您想要退回用户,请将其返回else{}
,将json = users;
替换为return users;
,然后删除代码末尾的返回。
然后学习更多有关Asynchrounous vs Synchrounous
次来电及其执行方式的内容。并且还考虑在Javascript中学习callback
。